如何使弹性搜索多匹配模糊搜索始终返回最小数量的结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使弹性搜索多匹配模糊搜索始终返回最小数量的结果相关的知识,希望对你有一定的参考价值。

我今天刚刚进入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~”

答案

根据Elasticsearch docs,关于模糊性:AUTO

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

0..2 必须完全匹配 3..5 一个编辑允许 > 5 允许两次编辑

因此,如果您想要允许2次编辑而不管术语的长度,请不要使用auto。使用模糊= 2。

以上是关于如何使弹性搜索多匹配模糊搜索始终返回最小数量的结果的主要内容,如果未能解决你的问题,请参考以下文章

我如何在 Elastic Search 中获得完全匹配过滤器结果

如何在弹性搜索查询中组合和

转MySql模糊搜索结果按匹配度排序

(Swift) 如何对 Core Data 进行模糊搜索?

Spring数据弹性搜索总和 - 价格,数量

js如何实现模糊查询