我今天刚开始研究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〜”
答案 0 :(得分:1)
根据Elasticsearch docs,关于模糊性:自动
根据术语的长度生成编辑距离。可以选择提供低距离和高距离参数AUTO:[low],[high],如果未指定,则默认值为3和6,等同于AUTO:3,6,它们表示长度:
0..2
必须完全匹配
3..5
允许进行一次编辑
> 5
允许进行两次修改
因此,如果无论词长如何,都允许进行2次编辑,请不要使用auto。使用模糊度= 2。