无法将ElasticSearch多索引查询转换为NEST查询

时间:2014-09-22 20:40:52

标签: c# elasticsearch nest

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")))));

1 个答案:

答案 0 :(得分:2)

在Sense中工作的查询是filtered query,而在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"))
      )
    )
  )
);