弹性搜索中具有模糊性的 Bool 查询 java 客户端

Bool query with fuzziness in elastic search java client

我正在尝试从给定的大学和姓名中选择用户。这里的名字有模糊查询。 以下是弹性搜索 (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)"

如何解决这个错误或者有没有其他方法可以实现这个查询?

问题是,没有参数 return 的方法 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;
    }

您调用了第二种方法,而您需要调用第一种方法。