[英]Create Best Query For Lucene
嘿,我正在嘗試創建一些查詢,它們應該像 sql 中的“where ..... and .... and”一樣工作。 我曾為此目的嘗試過 boolQuery,例如;
boolQueryBuilder.add(new BooleanClause(new FuzzyQuery(new Term(fieldCity,
city), 0), Occur.FILTER));
boolQueryBuilder.add(new BooleanClause(new WildcardQuery(new Term(fieldText,
str)), Occur.SHOULD));
boolQueryBuilder.add(new FuzzyQuery(new Term(fieldText, strTemp), fuzzy),
Occur.SHOULD);
boolQueryBuilder.add(new FuzzyQuery(new Term(fieldText, mergedKeyword),
fuzzy), Occur.SHOULD);
這些是我的查詢生成器構建器元素之一。 但問題是它不像“AND”操作“FILTER”或“MUST”在“應該”查詢與任何結果不匹配時返回給定字段的所有值。
我想要速度返回,所以我希望每次搜索的結果更少。 有人可以就我的問題給我建議。
祝你工作愉快。
如果我理解正確,問題是您要返回所有與 fieldCity 匹配的結果,無論您是否在 fieldText 上匹配,並且您希望所有結果在 fieldText 上至少有一個匹配項。
您現在擁有的基本上是: +city text1 text2 text3
。 唯一需要匹配的術語是城市。 剩余的學期會影響分數,但不會限制結果集。 如果您想確保至少獲得一個 fieldText 匹配,您可以將查詢更改為更像這樣: +city +(text1 text2 text3)
:
BooleanQuery fieldTextSubQuery = new BooleanQuery.Builder()
.add(new WildcardQuery(new Term(fieldText, str), Occur.SHOULD)
.add(new FuzzyQuery(new Term(fieldText, strTemp), fuzzy), Occur.SHOULD)
.add(new FuzzyQuery(new Term(fieldText, mergedKeyword), fuzzy), Occur.SHOULD)
.build();
BooleanQuery finalQuery = new BooleanQuery.Builder()
.add(new FuzzyQuery(new Term(fieldCity, city), 0), Occur.FILTER)
.add(textSubQuery, Occur.MUST)
.build();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.