搜索引擎学习(六)Query的子类查询
生活随笔
收集整理的這篇文章主要介紹了
搜索引擎学习(六)Query的子类查询
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Query的子類查詢
PS:這是通用代碼,下面的子類查詢調(diào)用到的時(shí)候就不再寫(xiě)這部分的具體的實(shí)現(xiàn)過(guò)程了
/*** 構(gòu)造IndexSearcher對(duì)象** @return* @throws Exception*/private IndexSearcher getIndexSearcher() throws Exception {/*創(chuàng)建一個(gè)Directory對(duì)象,指定索引庫(kù)的位置*/Directory directory = FSDirectory.open(new File("E:\\zhanghaoBF\\luceneSolr\\indexLibrary").toPath());//磁盤(pán)(硬盤(pán))上的路徑/*創(chuàng)建一個(gè)IndexReader(索引讀取)對(duì)象*/IndexReader indexReader = DirectoryReader.open(directory);//打開(kāi)索引庫(kù)(此對(duì)象為流對(duì)象)/*創(chuàng)建一個(gè)IndexSearcher(索引搜索)對(duì)象*/IndexSearcher indexSearcher = new IndexSearcher(indexReader);return indexSearcher;//索引對(duì)象 }/*** 執(zhí)行查詢并打印結(jié)果** @param query* @param indexSearcher* @throws Exception*/private void printResult(Query query, IndexSearcher indexSearcher) throws Exception {/*執(zhí)行查詢*/TopDocs topDocs = indexSearcher.search(query, 10);//根據(jù)query搜索,返回評(píng)分最高的10條/*返回查詢結(jié)果,遍歷查詢結(jié)果并輸出*/ScoreDoc[] scoreDocs = topDocs.scoreDocs;//PS:注意這里返回的是文檔id的數(shù)組for (ScoreDoc scoreDoc : scoreDocs) {int docId = scoreDoc.doc;//文檔IDDocument document = indexSearcher.doc(docId);//對(duì)應(yīng)的文檔 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 CodeMatchAllDocsQuery
MatchAllDocsQuery子類查詢方法的作用是查詢索引目錄下的所有文檔id數(shù)組。
/*** 查詢索引目錄下的所有文檔** @throws Exception*/@Testpublic void testMatchAllDocsQuery() throws Exception {//獲取IndexSearcher(索引搜索)對(duì)象IndexSearcher indexSearcher = getIndexSearcher();//新建查詢子類對(duì)象Query query = new MatchAllDocsQuery();//執(zhí)行查詢并打印結(jié)果 printResult(query, indexSearcher);}TermQuery
TermQuery子類查詢方法的作用是對(duì)指定的域和關(guān)鍵詞進(jìn)行精準(zhǔn)查詢。
/*** 對(duì)指定的域和關(guān)鍵詞進(jìn)行精準(zhǔn)查詢** @throws Exception*/@Testpublic void testTermQuery() throws Exception {//獲取IndexSearcher(索引搜索)對(duì)象IndexSearcher indexSearcher = getIndexSearcher();//構(gòu)造查詢條件Term condition = new Term("fileContent", "lucene");//新建查詢子類對(duì)象Query query = new TermQuery(condition);//執(zhí)行查詢并打印結(jié)果 printResult(query, indexSearcher);}LongPoint.newRangeQuery(老版本用的NumericRangQuery)
LongPoint.newRangeQuery子類查詢方法的作用是查詢域長(zhǎng)度在指定范圍內(nèi)的文檔id數(shù)組。
/*** 根據(jù)數(shù)值范圍查詢** @throws Exception*/@Testpublic void testNumericRangQuery() throws Exception {//獲取IndexSearcher(索引搜索)對(duì)象IndexSearcher indexSearcher = getIndexSearcher();//新建查詢子類對(duì)象(老版本用的是NumericRangQuery)Query query = LongPoint.newRangeQuery("fileSize", 1L, 200L);//查詢長(zhǎng)度在1-200之間的索引文檔id數(shù)組//執(zhí)行查詢并打印結(jié)果 printResult(query, indexSearcher);}BooleanQuery.Builder(老版本不用指定builder,可以直接new出BooleanQuery對(duì)象后直接添加query條件)
BooleanQuery.Builder子類查詢方法的作用是組合條件查詢(多條件查詢)。
/*** 組合查詢(多條件查詢)** BooleanClause.Occur.MUST(必須滿足此條件)【相當(dāng)于sql中的and】* BooleanClause.Occur.SHOULD(可以滿足也可以不滿足)【相當(dāng)于sql中的or】* BooleanClause.Occur.MUST_NOT(必須不滿足此條件)【相當(dāng)于sql中的not】** @throws Exception*/@Testpublic void testBooleanQuery() throws Exception {//獲取IndexSearcher(索引搜索)對(duì)象IndexSearcher indexSearcher = getIndexSearcher();//構(gòu)造查詢條件Query query1 = new TermQuery(new Term("fileName", "lucene"));Query query2 = new TermQuery(new Term("fileContent", "lucene"));//新建查詢子類對(duì)象(老版本不用指定builder,可以直接new出BooleanQuery對(duì)象后直接添加query條件)BooleanQuery.Builder builder = new BooleanQuery.Builder();builder.add(query1, BooleanClause.Occur.MUST);builder.add(query2, BooleanClause.Occur.MUST);BooleanQuery booleanQuery = builder.build();//執(zhí)行查詢并打印結(jié)果 printResult(booleanQuery, indexSearcher);}?
轉(zhuǎn)載于:https://www.cnblogs.com/riches/p/11479027.html
總結(jié)
以上是生活随笔為你收集整理的搜索引擎学习(六)Query的子类查询的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Oracle学习(十四)分表分区
- 下一篇: 搜索引擎学习(七)解析查询