我正在尝试从给定的大学和名称中实现用户的选择。这里的名称有模糊查询。 以下是弹性搜索(v5.1.2)中的查询,它给出了我想要的结果。但是在Java中出错了
{
"query" : {
"bool": {
"must" : [{
"match": {
"collegeAccountCode": "DIT"
}
},
{
"match": {
"name" : {
"query": "Rahul",
"fuzziness" : "AUTO"
}
}
}]
}
}
}
我尝试使用以下java API(v5.1.2)
来实现这一点QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("name", studentName).fuzziness())
.must(QueryBuilders.matchQuery("collegeAccountCode", AccountId));
但是我收到一个错误说:
"The method must(QueryBuilder) in the type BoolQueryBuilder is not applicable for the arguments
(Fuzziness)"
如何解决此错误或是否有其他方法来实现此查询?
答案 0 :(得分:4)
问题是,没有参数的方法fuziness()
会返回当前Fuzziness
,这显然不是must()
所期望的,您需要执行以下操作:
QueryBuilders.boolQuery()
.must(QueryBuilders.matchQuery("name", "Rahul").fuzziness(Fuzziness.AUTO))
.must(QueryBuilders.matchQuery("collegeAccountCode", "DIT"));
一段代码,再解释一下这个问题:
/** Sets the fuzziness used when evaluated to a fuzzy query type. Defaults to "AUTO". */
public MatchQueryBuilder fuzziness(Object fuzziness) {
this.fuzziness = Fuzziness.build(fuzziness);
return this;
}
/** Gets the fuzziness used when evaluated to a fuzzy query type. */
public Fuzziness fuzziness() {
return this.fuzziness;
}
第二种方法,你需要拨打第一种方法。