Выполнение запроса с несколькими фразами в 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