Java客户端中使用模糊搜索的布尔查询

3

我正在尝试实现从指定学院和姓名中选择用户的功能。这里的姓名是模糊查询。 以下是在elastic search(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)"

如何修复此错误或者是否有其他实现此查询的方法?
1个回答

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;
    }

你需要调用第一个方法,而不是调用第二个方法。


非常感谢。我从未想过这可能是问题所在。你解释得很清楚。 - Tanay Agrawal
另外,它说默认为AUTO,所以我认为我不需要提供任何参数。 - Tanay Agrawal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接