1

我有一个使用 Java API 的现有 ElasticSearch 查询:

BoolQueryBuilder queryBuilder = 
     boolQuery().should(queryStringQuery(theUsersQueryString)); 
SearchResponse response = client.prepareSearch(...).setQuery(queryBuilder);

现在我想为此添加模糊性,以允许轻微的拼写错误仍然向用户返回一些内容。我的猜测是向QueryBuilders对象添加模糊参数会很有成效:

boolQuery().should(queryStringQuery(theUsersQueryString)
              .fuzziness(Fuzziness.ONE)
              .fuzzyMaxExpansions(4)
              .fuzzyPrefixLength(2));

不幸的是,这似乎不起作用,到目前为止我一直无法找到好的文档。例如,我的John Deere数据库中有字符串。如果我使用查询字符串deere,我会得到匹配,但如果我使用查询字符串DeereeDeeer.

我的问题是:我应该如何正确地模糊我的查询?

4

1 回答 1

3

我选择创建一个新查询而不是修改我现有的查询。

MultiMatchQueryBuilder fuzzyMmQueryBuilder = multiMatchQuery(
                theUsersQueryString, "field1", "field2", ... , "fieldn").fuzziness("AUTO");
BoolQueryBuilder b = boolQuery().should(fuzzyMmQueryBuilder); 
SearchRequestBuilder srb = client.prepareSearch(...).setQuery(b)... 
SearchResponse res = srb.execute().actionGet();

此查询表现出模糊行为。

于 2016-03-10T10:51:55.077 回答