簡體   English   中英

為 Lucene 創建最佳查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM