【问题标题】:ElasticSearch NEST multi match returns all resultElasticSearch NEST 多重匹配返回所有结果
【发布时间】:2020-09-30 11:24:12
【问题描述】:

我有这个 C# 代码,它预计将使用 multi-match Elastic Search 类型匹配 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))
     )));

问题是无论我传入什么文本,它都会返回所有结果。我错过了什么?

【问题讨论】:

    标签: elasticsearch nest


    【解决方案1】:

    为了有效地调试这些类型的问题,您需要检查发往 Elasticsearch 的 HTTP 请求,最终您的查询构建器将转换为 search JSON 并针对 Elasticsearch 执行。

    我不知道nest,但我为Java 代码编写了answer,它以JSON 格式打印Elasticsearch 查询。

    虽然我的猜测是,您没有发送正确的 HTTP 方法,应该是 POST,并且您可能使用 GET 发送它,这导致 ES 忽略您的搜索查询并返回所有文档。

    【讨论】:

    • 谢谢。我意识到我错过了.Query(query)
    【解决方案2】:

    添加.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

    【讨论】:

    • 您可以在一段时间后将其标记为答案,以便对社区有所帮助,以及您如何调试并发现它丢失的任何指针:)
    猜你喜欢
    • 2020-08-13
    • 2016-11-08
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多