如何获得Elasticsearch多匹配模糊搜索以始终返回最少数量的结果

时间:2018-09-12 07:41:36

标签: elasticsearch lucene

我今天刚开始研究Elasticsearch,并且试图用类似的Elasticsearch查询替换现有的lucene.net实现模糊搜索。

我正在使用Elasticsearch.Net ElasticLowLevelClient

通过docker作为我的服务器运行

docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.4.0

我越来越近了,我在返回低值结果时遇到了一些问题。

我希望查询始终不返回0分。

例如,我有一个文档,其列值为tatra

查询“ tat”

返回5个结果,但不返回tatra

查询“ tatr”

返回tatra结果

var node = new Uri("http://127.0.0.1:9200");
var config = new ConnectionConfiguration(node);
_client = new ElasticLowLevelClient(config);

var searchResponse = await _elasticsearchService._client.SearchAsync<StringResponse>(
    indexName,
    indexName,
    // https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html
    PostData.Serializable(new
    {
        from = 0,
        size = maxReturnCount,
        min_score = 0.0,
        query = new
        {
            multi_match = new
            {
                fields = "*",
                type = "most_fields",
                query = string.Join(" ", queryParts),
                fuzziness = "AUTO",
                zero_terms_query = "all"
            }
        }
    })
);

我以前在lucene中使用的查询类似于 “ tat〜”

1 个答案:

答案 0 :(得分:1)

根据Elasticsearch docs,关于模糊性:自动

  

根据术语的长度生成编辑距离。可以选择提供低距离和高距离参数AUTO:[low],[high],如果未指定,则默认值为3和6,等同于AUTO:3,6,它们表示长度:

     

0..2
  必须完全匹配
  3..5
  允许进行一次编辑
  > 5
  允许进行两次修改

因此,如果无论词长如何,都允许进行2次编辑,请不要使用auto。使用模糊度= 2。