Выполнение запроса "match-phrase" в Elastic Search

это должно быть очевидно для меня, но это не так. Следующие два соответствуют только второй фразе (в данном случае "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"
    }
  }
}

Я хочу сопоставить все документы, содержащие обе любые фразы точно так же, как и введенные.

Обновление: См. обновление сразу над

Ответ 1

Ваш первый запрос не является действительно допустимым объектом JSON, потому что вы дважды используете одно и то же имя поля.

Вы можете использовать bool must query для соответствия обеим фразам:

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"}}
      ]
    }
 }
}