- 自己動手寫分布式搜索引擎
- 羅剛
- 447字
- 2020-11-28 15:52:48
3.3.2 常用查詢
Query是一個用于查詢的抽象基類,有各種具體查詢實現(xiàn)類,比如實現(xiàn)基本詞查詢的TermQuery、實現(xiàn)布爾邏輯查詢的BooleanQuery、實現(xiàn)短語查詢的PhraseQuery、實現(xiàn)前綴匹配查詢的PrefixQuery、實現(xiàn)區(qū)間查詢的RangeQuery、實現(xiàn)多詞查詢的MultiTermQuery、實現(xiàn)過濾條件查詢的FilteredQuery、約束多個查詢詞密集度的SpanQuery等。
對于復(fù)雜查詢,需要調(diào)用rewrite()方法使其變成簡單的查詢。例如,一個PrefixQuery將被重寫成由TermQuery組成的BooleanQuery。
可以使用QueryParser查詢分詞列。一般不需要查詢沒有使用分詞的列,如果要查詢,可以使用TermQuery查詢,例如url列。
最基本的詞條查詢使用TermQuery,用來查詢不切分的字段。例如查詢一個雜志:
Term term = new Term("journal_id", "1672-6251"); TermQuery query = new TermQuery(term);
為了方便測試查詢,使用createDocument()方法索引測試內(nèi)容。
private static Document createDocument(String id, String content) { //創(chuàng)建文檔 Document doc = new Document(); doc.add(new Field("id", id, StringField.TYPE_STORED)); //索引不分詞的字符串列 //索引分詞的文本列 doc.add(new Field("contents", content, TextField.TYPE_STORED)); return doc; }
組合條件查詢使用布爾邏輯查詢BooleanQuery。下面舉一個布爾邏輯查詢的例子:同時查詢標(biāo)題列和內(nèi)容列。使用BooleanClause.Occur.SHOULD的查詢效果如圖3-10所示。

圖3-10 BooleanClause.Occur.SHOULD查詢效果
QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, "body", analyzer); Query bodyQuery = parser.parse("NBA"); //查詢內(nèi)容列 parser = new QueryParser(Version.LUCENE_CURRENT, "title", analyzer); Query titleQuery = parser.parse("NBA"); //查詢標(biāo)題列 BooleanQuery bodyOrTitleQuery = new BooleanQuery(); //用OR條件合并兩個查詢 bodyOrTitleQuery.add(bodyQuery, BooleanClause.Occur.SHOULD); bodyOrTitleQuery.add(titleQuery, BooleanClause.Occur.SHOULD); //返回前10條結(jié)果 ScoreDoc[] hits = isearcher.search(bodyOrTitleQuery, 10).scoreDocs;
推薦閱讀
- Entity Framework Tutorial
- Illustrator CS6核心應(yīng)用案例教程(全彩慕課版)
- PPT設(shè)計實用教程
- Learning Ext JS 3.2
- SolidWorks2014基礎(chǔ)實例教程
- ABAQUS基礎(chǔ)入門與案例精通
- UG NX 完全實例解析
- Drupal 6 Panels Cookbook
- 新編AutoCAD制圖快捷命令速查一冊通
- 中文版After Effects 2022基礎(chǔ)教程
- Photoshop+CorelDRAW平面設(shè)計案例實戰(zhàn):從入門到精通(視頻自學(xué)全彩版)
- Cacti 0.8 Network Monitoring
- Photoshop數(shù)字圖像處理
- 中文版Photoshop平面設(shè)計入門教程
- SketchUP草圖繪制從新手到高手