Использование `MatchPhrasePrefix` в запросе DSL Elasticsearch - PullRequest
0 голосов
/ 27 сентября 2019

Я новичок в Elasticsearch.

Может кто-нибудь объяснить, почему этот поиск (NEST 6):

var searchResponse1 = this.elasticClient.Search<dynamic>(
    s => s.AllTypes().AllIndices().IgnoreUnavailable().Size(100).From(0)
        .Query(q => q.Bool(b => b.Must(m => m.SimpleQueryString(c => c.Query("query"))))));

правильно приводит к следующему запросу (я получил это с помощью Fiddler):

POST https://someUrl.com/_search?pretty=true&error_trace=true&typed_keys=true&ignore_unavailable=true HTTP/1.1
{
  "from": 0,
  "query": {
    "bool": {
      "must": [
        {
          "simple_query_string": {
            "query": "query"
          }
        }
      ]
    }
  },
  "size": 100
}

Но оба следующих поиска 'MatchPhrasePrefix':

var searchResponse2 = this.elasticClient.Search<dynamic>(
    s => s.AllTypes().AllIndices().IgnoreUnavailable().Size(100).From(0)
        .Query(q => q.Bool(b => b.Must(m => m.MatchPhrasePrefix(c => c.Query("query"))))));

var searchResponse3 = this.elasticClient.Search<dynamic>(
    s => s.AllTypes().AllIndices().IgnoreUnavailable().Size(100).From(0)
        .Query(q => q.MatchPhrasePrefix(p => p.Query("query"))));

приводят к:

POST https://someUrl.com/_search?pretty=true&error_trace=true&typed_keys=true&ignore_unavailable=true HTTP/1.1
{
  "from": 0,
  "size": 100
}

Чего мне здесь не хватает?

1 Ответ

1 голос
/ 27 сентября 2019

MatchPhrasePrefix запрос должен также указать поле для назначения.Например,

var searchResponse2 = client.Search<dynamic>(s => s
    .AllTypes()
    .AllIndices()
    .IgnoreUnavailable()
    .Size(100)
    .From(0)
    .Query(q => q
        .Bool(b => b
            .Must(m => m
                .MatchPhrasePrefix(c => c
                    .Field("some_field") // <-- target the "some_field" field
                    .Query("query")
                )
            )
        )
    )
);

, что приводит к запросу

POST /_search
{
  "from": 0,
  "query": {
    "bool": {
      "must": [
        {
          "match_phrase_prefix": {
            "some_field": {
              "query": "query"
            }
          }
        }
      ]
    }
  },
  "size": 100
}

Без указания поля запрос считается безусловным в клиенте и будет опущен изответ.Есть проблема , чтобы обсудить, должны ли безусловные запросы быть удалены в следующей основной версии.

...