Проблема с преобразованием мультииндексного запроса 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")))));

person Mike Gwilt    schedule 22.09.2014    source источник


Ответы (1)


Запрос, который работает в Sense, представляет собой отфильтрованный запрос, тогда как в NEST вы выполняете запрос помимо фильтра. Это может быть проблемой.

Попробуйте это, что должно сгенерировать JSON, эквивалентный запросу, который вы выполняете в Sense:

.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"))
      )
    )
  )
);
person Greg Marzouka    schedule 24.09.2014