ElasticSearch NEST 多重匹配 returns 所有结果
ElasticSearch NEST multi match returns all result
我有这段 C# 代码,预计会使用 multi-match
弹性搜索类型匹配 2 个字段。我正在使用 NEST 包。
var response = await _elasticClient.SearchAsync<FileDocument>(
s => s.Query(q => q.MultiMatch(c => c
.Fields(f => f.Field(p => p.FileName).Field(query))
.Fields(f => f.Field(p => p.Metadata).Field(query))
)));
问题是无论我传入什么文本,它 returns 都是结果。我错过了什么吗?
为了有效地调试这些类型的问题,您需要检查发送到 Elasticsearch 的 HTTP 请求,最终您的查询构建器将转换为 search JSON并将针对 Elasticsearch 执行。
我不知道 nest
但已经为 Java 代码编写了 ,它以 JSON 格式打印 Elasticsearch 查询。
虽然我的猜测是,您没有发送正确的 HTTP 方法,应该是 POST
,您可能会使用 GET
发送它,这导致 ES 忽略您的搜索查询和return 所有文档。
添加.Query(query)
后解决
var response = await _elasticClient.SearchAsync<FileDocument>(
s => s.Query(q => q.MultiMatch(c => c
.Fields(f => f.Field(p => p.FileName).Field(p=>p.Metadata))
.Query(query)
))
);
参考 - https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/multi-match-usage.html
我有这段 C# 代码,预计会使用 multi-match
弹性搜索类型匹配 2 个字段。我正在使用 NEST 包。
var response = await _elasticClient.SearchAsync<FileDocument>(
s => s.Query(q => q.MultiMatch(c => c
.Fields(f => f.Field(p => p.FileName).Field(query))
.Fields(f => f.Field(p => p.Metadata).Field(query))
)));
问题是无论我传入什么文本,它 returns 都是结果。我错过了什么吗?
为了有效地调试这些类型的问题,您需要检查发送到 Elasticsearch 的 HTTP 请求,最终您的查询构建器将转换为 search JSON并将针对 Elasticsearch 执行。
我不知道 nest
但已经为 Java 代码编写了
虽然我的猜测是,您没有发送正确的 HTTP 方法,应该是 POST
,您可能会使用 GET
发送它,这导致 ES 忽略您的搜索查询和return 所有文档。
添加.Query(query)
var response = await _elasticClient.SearchAsync<FileDocument>(
s => s.Query(q => q.MultiMatch(c => c
.Fields(f => f.Field(p => p.FileName).Field(p=>p.Metadata))
.Query(query)
))
);
参考 - https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/multi-match-usage.html