模糊现有 ElasticSearch Java API 查询
Fuzzify existing ElasticSearch Java API query
我有一个现有的 ElasticSearch 查询,它使用 Java API:
BoolQueryBuilder queryBuilder =
boolQuery().should(queryStringQuery(theUsersQueryString));
SearchResponse response = client.prepareSearch(...).setQuery(queryBuilder);
现在我想添加模糊性,以允许较小的拼写错误仍然return给用户一些东西。我的猜测是向 QueryBuilders
对象添加模糊参数会很有成效:
boolQuery().should(queryStringQuery(theUsersQueryString)
.fuzziness(Fuzziness.ONE)
.fuzzyMaxExpansions(4)
.fuzzyPrefixLength(2));
不幸的是,这似乎行不通,而且到目前为止我还找不到很好的文档。例如,我的数据库中有字符串 John Deere
。如果我使用查询字符串 deere
我会得到一个匹配项,但如果我使用查询字符串 Deeree
或 Deeer
.
则不会
我的问题是:我应该如何正确模糊我的查询?
我选择创建一个新查询而不是修改我现有的查询。
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();
此查询表现出模糊行为。
我有一个现有的 ElasticSearch 查询,它使用 Java API:
BoolQueryBuilder queryBuilder =
boolQuery().should(queryStringQuery(theUsersQueryString));
SearchResponse response = client.prepareSearch(...).setQuery(queryBuilder);
现在我想添加模糊性,以允许较小的拼写错误仍然return给用户一些东西。我的猜测是向 QueryBuilders
对象添加模糊参数会很有成效:
boolQuery().should(queryStringQuery(theUsersQueryString)
.fuzziness(Fuzziness.ONE)
.fuzzyMaxExpansions(4)
.fuzzyPrefixLength(2));
不幸的是,这似乎行不通,而且到目前为止我还找不到很好的文档。例如,我的数据库中有字符串 John Deere
。如果我使用查询字符串 deere
我会得到一个匹配项,但如果我使用查询字符串 Deeree
或 Deeer
.
我的问题是:我应该如何正确模糊我的查询?
我选择创建一个新查询而不是修改我现有的查询。
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();
此查询表现出模糊行为。