- 自己動手寫分布式搜索引擎
- 羅剛
- 608字
- 2020-11-28 15:52:49
3.3.5 布爾查詢
可以使用BooleanQuery組合多個查詢條件。合取查詢使用BooleanClause.Occur.MUST連接多個查詢詞。
Term t1 = new Term(FIELD, "lucene"); TermQuery q1 = new TermQuery(t1); Term t2 = new Term(FIELD, "doug"); TermQuery q2 = new TermQuery(t2); //合取查詢 BooleanQuery query = new BooleanQuery(); query.add(q1, BooleanClause.Occur.MUST); //必須包含這個條件 query.add(q2, BooleanClause.Occur.MUST);
選擇出包含任何一個查詢詞的文檔叫作析取(Disjunction)。用真值表描述析取如下。

析取查詢使用BooleanClause.Occur.SHOULD連接多個查詢詞。
//析取查詢 BooleanQuery q = new BooleanQuery(); q.Add(q1, BooleanClause.Occur.SHOULD); //可以只包含這個條件 q.Add(q2, BooleanClause.Occur.SHOULD);
例如去餐館點菜,有人不喜歡吃辣的東西,所以他找出所有不辣的菜,這叫作否定(Negation)。用真值表描述否定如下。

BooleanClause.Occur.MUST_NOT表示不能包括符合這個條件的文檔。例如找出不包含“辣”的所有文檔。
Term t1 = new Term("body", "辣"); TermQuery q1 = new TermQuery(t1); BooleanQuery mbq = new BooleanQuery(); MatchAllDocsQuery alldocs = new MatchAllDocsQuery(); //匹配所有文檔 mbq.Add(q1, BooleanClause.Occur.MUST_NOT); //不包括滿足q1條件的文檔 mbq.Add(alldocs, BooleanClause.Occur.MUST);
打麻將三缺一不行,但是如果同時查詢多個詞,最好只差一個查詢詞的文檔也能匹配。
對于長句搜索,則提取其中的主要查詢詞,只要大部分詞在文檔中出現就可以了。例如搜索聯系方式列:
● "Stanford University School of Medicine, Palo Alto, CA USA",
● "Institute of Neurobiology, School of Medicine, Stanford University, Palo Alto, CA",
● "School of Medicine, Harvard University, Boston MA",
● "Brigham & Women's, Harvard University School of Medicine, Boston, MA"
● "Harvard University, Cambridge MA"
搜索聯系方式使用如下的長查詢詞:
"School of Medicine, Stanford University, Palo Alto, CA"
需要找到所有和Stanford相關的文檔。
PhraseQuery要求短語中所有的詞都存在才能匹配。這里需要一個更加寬松的PhraseQuery版本,要求它對詞出現的順序敏感,但是允許缺少個別詞,缺少詞的文檔分值低,但是仍然能匹配。BooleanQuery.setMinimumNumberShouldMatch(int)方法可以定義需要匹配的條件的最小數量。
例如,BooleanQuery中有2項,調用BooleanQuery.setMinimumNumberShouldMatch(1)方法可以匹配其中任意的1項或者更多。
Term t1 = new Term(FIELD, "雞"); TermQuery q1 = new TermQuery(t1); Term t2 = new Term(FIELD, "鴨"); TermQuery q2 = new TermQuery(t2); BooleanQuery mbq = new BooleanQuery(); mbq.add(q1 , BooleanClause.Occur.SHOULD); mbq.add(q2 , BooleanClause.Occur.SHOULD); mbq.setMinimumNumberShouldMatch(1);
- 突破平面Photoshop UI界面設計與制作剖析
- JBoss AS 5 Development
- Photoshop CS6 商業應用案例實戰
- 畫筆圣經 Photoshop專業繪畫技法
- CorelDRAW X5實用教程(第2版)
- RESTful PHP Web Services
- 7小時精通剪映:短視頻剪輯/調色/特效/字幕(手機版+電腦版)
- 金融精英PPT實操手冊:世界知名公司這樣展示研究報告
- 中文版3ds Max 2014-VRay效果圖制作完全自學教程
- 中文版Photoshop CC基礎教程
- 企業虛擬化實戰:VMware篇
- Learning Dojo
- Instant GSON
- 中文版Photoshop CS6經典自學教程(培訓教材版)
- WordPress Multisite Administration