嘿,我正在尝试创建一些查询,这些查询应类似于“ where ..... 和....和“在sql中。 我为此目的尝试过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);
这些是我的查询生成器builders元素之一。但是问题在于 不能像“ AND”操作“ FILTER”或“ MUST”那样返回所有值 当“ SHOULD”查询与任何结果都不匹配时的给定字段。
我希望返回速度,所以我希望每次搜索的结果更少。 有人可以给我有关我的问题的建议。
做得好。
答案 0 :(得分:1)
如果我的理解正确,那么问题在于您将通过fieldCity返回所有具有匹配项的结果,无论是否在fieldText上具有匹配项,并且希望所有结果在fieldText上至少具有一个匹配项。 / p>
您现在拥有的基本上是:+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();