31

これは私には明らかなはずですが、そうではありません。次の two-match は第 2 フェーズのみ (この場合はCape Basin)

"query": {
  "match_phrase": {
    "contents": {
      "query": "St Peter Fm",
      "query": "Cape Basin"
    }
  }
}

"query": {
  "match_phrase": {
    "contents": {
      "query": ["St Peter Fm", "Cape Basin"]
    }
  }
}

次はエラーで鳴ります

"query": {
  "match_phrase": {
    "contents": {
      "query": "St Peter Fm"
    },
    "contents": {
      "query": "Cape Basin"
    }
  }
}

いずれか の語句を入力したとおりに含むすべての文書を照合したいと考えています。

4

2 に答える 2

36

同じフィールド名を 2 回使用しているため、最初のクエリは実際には有効な JSON オブジェクトではありません。

bool must クエリを使用して、両方のフレーズを一致させることができます。

PUT phrase/doc/1
{
  "text": "St Peter Fm some other text Cape Basin"
}
GET phrase/_search
{
  "query": {
    "bool": {
      "must": [
         {"match_phrase": {"text":  "St Peter Fm"}},
         {"match_phrase": {"text":  "Cape Basin"}}
      ]
    }
 }
}
于 2015-05-03T23:06:29.683 に答える
25

の句セマンティクスを有効にすることで、これを実行できることがわかりましたmulti_match

これを行うには、次のように構文type:に属性を追加します。multi_match

GET /_search
{
  "query": {
    "multi_match" : {
      "query":      "quick brown fox",
      "type":       "phrase",
      "fields":     [ "subject", "message" ]
    }
  }
}

そのように考えると(他の検索句で「マルチ」サポートを有効にするのではなく)、期待どおりの場所に収まります。

参照: https://www.elastic.co/guide/en/elasticsearch/reference/6.5/query-dsl-multi-match-query.html#type-phrase

于 2019-01-14T17:52:06.317 に答える