Выполнение запроса с несколькими фразами в Elastic Search

Это должно быть очевидно для меня, но это не так. Следующие два соответствуют только второй фразе (в данном случае "мыс бассейна")

"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 для соответствия обеим фразам:

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

Оказывается, вы можете сделать это, включив семантику фразы для multi_match,

Для этого вы добавляете type: приписать multi_match синтаксис как ниже:

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

Когда вы думаете об этом таким образом (вместо того, чтобы включить поддержку "multi" в других предложениях поиска), это соответствует тому, что вы ожидаете.

ссылка: https://www.elastic.co/guide/en/elasticsearch/reference/6.5/query-dsl-multi-match-query.html

Другие вопросы по тегам