在Elasticsearch的DSL搜索查询中使用`MatchPhrasePrefix`

问题描述 投票:0回答:1

我是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
}

我在这里想念什么?

c# elasticsearch nest querydsl
1个回答
0
投票
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 }

没有指定该字段,该查询在客户端中被视为

无条件,并且将从响应中省略。 an issue讨论是否应在下一个主要版本中删除conditionless查询。

© www.soinside.com 2019 - 2024. All rights reserved.