Bool在弹性搜索java客户端中查询模糊性

时间:2017-02-10 15:05:23

标签: java elasticsearch elasticsearch-java-api

我正在尝试从给定的大学和名称中实现用户的选择。这里的名称有模糊查询。 以下是弹性搜索(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 个答案:

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

第二种方法,你需要拨打第一种方法。