我有一个现有的ElasticSearch查询,它使用Java:
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,则会得到匹配,但如果使用查询字符串Deeree或Deeer,则不会得到匹配。
我的问题是:我应该如何正确地模糊我的疑问?
发布于 2016-03-10 10:51:55
我选择创建一个新的查询,而不是修改现有的查询。
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();此查询显示出模糊行为。
https://stackoverflow.com/questions/35894575
复制相似问题