将ElasticSearch多索引查询转换为NEST查询时出现问题

本文关键字:查询 问题 NEST 转换 ElasticSearch 索引 | 更新日期: 2023-09-27 18:24:02

Sense中的以下查询返回我要查找的结果,但当我将其转换为NEST查询时,我总是收到0个结果。我哪里错了?

GET /event,meeting,executive,list,call/_search
{
  "query": {
    "filtered": {
      "query": {
        "bool": {
          "should": [
            {
              "match": {
                "name": "sample query"
              }
            },
            {
              "match": {
                "agenda": "sample query"
              }
            }
          ]
        }
      },
      "filter": {
        "query": {
          "match": {
            "symbol": "SAMPLESYMBOL"
          }
        }
      }
    }
  }
}

这里是我使用的NEST搜索描述符,它总是返回0个结果。

return arg.Indices(new[] { "event", "meeting", "executive", "list", "call" })
    .Size(size)
    .Filter(f => f.Query(qu => qu.Match(m => m.OnField("symbol").Query("SAMPLESYMBOL"))))
    .Query(q => q
        .Bool(b => b
            .Should(
                s => s.Match(m => m.Query(query).OnField("name")),
                s => s.Match(m => m.Query(query).OnField("agenda")))));

将ElasticSearch多索引查询转换为NEST查询时出现问题

在Sense中工作的查询是一个过滤查询,而在NEST中,除了过滤器之外,您还执行一个查询。这可能就是问题所在。

试试这个,它应该会生成与您在Sense:中运行的查询等效的JSON

.Indices(new[] { "event", "meeting", "executive", "list", "call" })
.Size(size)
.Query(q => q
  .Filtered(f => f
    .Query(qq => qq
      .Bool(b => b
        .Should(s => s.Match(m => m.OnField("name").Query(query)))
        .Should(s => s.Match(m => m.OnField("agenda").Query(query)))
      )
    )
    .Filter(ff => ff
      .Query(qf => qf
        .Match(m => m.OnField("symbol").Query("SAMPLESYMBOL"))
      )
    )
  )
);