日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

搜索引擎学习(六)Query的子类查询

發布時間:2024/4/17 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 搜索引擎学习(六)Query的子类查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Query的子類查詢

PS:這是通用代碼,下面的子類查詢調用到的時候就不再寫這部分的具體的實現過程了

/*** 構造IndexSearcher對象** @return* @throws Exception*/private IndexSearcher getIndexSearcher() throws Exception {/*創建一個Directory對象,指定索引庫的位置*/Directory directory = FSDirectory.open(new File("E:\\zhanghaoBF\\luceneSolr\\indexLibrary").toPath());//磁盤(硬盤)上的路徑/*創建一個IndexReader(索引讀取)對象*/IndexReader indexReader = DirectoryReader.open(directory);//打開索引庫(此對象為流對象)/*創建一個IndexSearcher(索引搜索)對象*/IndexSearcher indexSearcher = new IndexSearcher(indexReader);return indexSearcher;//索引對象 }/*** 執行查詢并打印結果** @param query* @param indexSearcher* @throws Exception*/private void printResult(Query query, IndexSearcher indexSearcher) throws Exception {/*執行查詢*/TopDocs topDocs = indexSearcher.search(query, 10);//根據query搜索,返回評分最高的10條/*返回查詢結果,遍歷查詢結果并輸出*/ScoreDoc[] scoreDocs = topDocs.scoreDocs;//PS:注意這里返回的是文檔id的數組for (ScoreDoc scoreDoc : scoreDocs) {int docId = scoreDoc.doc;//文檔IDDocument document = indexSearcher.doc(docId);//對應的文檔 String fileName = document.get("fileName");//文件名稱 System.out.println(fileName);String fileSize = document.get("fileSize");//文件大小 System.out.println(fileSize);String filePath = document.get("filePath");//文件路徑 System.out.println(filePath);System.out.println("----------華麗的分割線----------");}} View Code

MatchAllDocsQuery

MatchAllDocsQuery子類查詢方法的作用是查詢索引目錄下的所有文檔id數組。

/*** 查詢索引目錄下的所有文檔** @throws Exception*/@Testpublic void testMatchAllDocsQuery() throws Exception {//獲取IndexSearcher(索引搜索)對象IndexSearcher indexSearcher = getIndexSearcher();//新建查詢子類對象Query query = new MatchAllDocsQuery();//執行查詢并打印結果 printResult(query, indexSearcher);}

TermQuery

TermQuery子類查詢方法的作用是對指定的域關鍵詞進行精準查詢

/*** 對指定的域和關鍵詞進行精準查詢** @throws Exception*/@Testpublic void testTermQuery() throws Exception {//獲取IndexSearcher(索引搜索)對象IndexSearcher indexSearcher = getIndexSearcher();//構造查詢條件Term condition = new Term("fileContent", "lucene");//新建查詢子類對象Query query = new TermQuery(condition);//執行查詢并打印結果 printResult(query, indexSearcher);}

LongPoint.newRangeQuery(老版本用的NumericRangQuery)

LongPoint.newRangeQuery子類查詢方法的作用是查詢域長度在指定范圍內的文檔id數組。

/*** 根據數值范圍查詢** @throws Exception*/@Testpublic void testNumericRangQuery() throws Exception {//獲取IndexSearcher(索引搜索)對象IndexSearcher indexSearcher = getIndexSearcher();//新建查詢子類對象(老版本用的是NumericRangQuery)Query query = LongPoint.newRangeQuery("fileSize", 1L, 200L);//查詢長度在1-200之間的索引文檔id數組//執行查詢并打印結果 printResult(query, indexSearcher);}

BooleanQuery.Builder(老版本不用指定builder,可以直接new出BooleanQuery對象后直接添加query條件)

BooleanQuery.Builder子類查詢方法的作用是組合條件查詢(多條件查詢)。

/*** 組合查詢(多條件查詢)** BooleanClause.Occur.MUST(必須滿足此條件)【相當于sql中的and】* BooleanClause.Occur.SHOULD(可以滿足也可以不滿足)【相當于sql中的or】* BooleanClause.Occur.MUST_NOT(必須不滿足此條件)【相當于sql中的not】** @throws Exception*/@Testpublic void testBooleanQuery() throws Exception {//獲取IndexSearcher(索引搜索)對象IndexSearcher indexSearcher = getIndexSearcher();//構造查詢條件Query query1 = new TermQuery(new Term("fileName", "lucene"));Query query2 = new TermQuery(new Term("fileContent", "lucene"));//新建查詢子類對象(老版本不用指定builder,可以直接new出BooleanQuery對象后直接添加query條件)BooleanQuery.Builder builder = new BooleanQuery.Builder();builder.add(query1, BooleanClause.Occur.MUST);builder.add(query2, BooleanClause.Occur.MUST);BooleanQuery booleanQuery = builder.build();//執行查詢并打印結果 printResult(booleanQuery, indexSearcher);}

?

轉載于:https://www.cnblogs.com/riches/p/11479027.html

總結

以上是生活随笔為你收集整理的搜索引擎学习(六)Query的子类查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。