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