elasticsearch 如何使elasticsearch多匹配模糊搜索始终返回最少数量的结果
我今天刚刚投入Elasticsearch,我正试图用一个类似的Elasticsearch查询替换我现有的lucene.net实现模糊搜索 我正在使用Elasticsearch.Net ElasticLowLevel客户端 通过docker将其作为我的服务器运行elasticsearch 如何使elasticsearch多匹配模糊搜索始终返回最少数量的结果,elasticsearch,lucene,elasticsearch,Lucene,我今天刚刚投入Elasticsearch,我正试图用一个类似的Elasticsearch查询替换我现有的lucene.net实现模糊搜索 我正在使用Elasticsearch.Net ElasticLowLevel客户端 通过docker将其作为我的服务器运行 docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.4.
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"
}
}
})
);
var节点=新Uri(“http://127.0.0.1:9200");
var config=新连接配置(节点);
_客户端=新的ElasticLowLevel客户端(配置);
var searchResponse=await\u elasticsearchService.\u client.SearchAsync(
indexName,
indexName,
// https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html
PostData.Serializable(新的
{
from=0,
大小=maxReturnCount,
最低分数=0.0,
查询=新建
{
多重匹配=新
{
字段=“*”,
type=“大多数字段”,
query=string.Join(“,queryParts),
fuzziness=“自动”,
zero\u terms\u query=“全部”
}
}
})
);
我以前在lucene中使用的查询与
“tat~”根据,关于模糊性:自动
根据术语的长度生成编辑距离。低距离和高距离参数可以选择自动提供:[低],[高],如果未指定,默认值为3和6,相当于自动:3,6,表示长度:
0..2必须完全匹配
3..5
允许一次编辑
>5
允许两次编辑 因此,如果您希望允许2次编辑,而不考虑术语的长度,请不要使用“自动”。使用fuzziness=2