Мне нужен запрос с использованием match_phrase вместе с нечетким соответствием. Однако я не могу найти документацию для создания такого запроса. Кроме того, когда я пытаюсь объединить запросы (один внутри другого), он выдает ошибки. Можно ли построить такой запрос?
Elasticsearch match_phrase запрос и нечеткий запрос — оба могут использоваться вместе
Ответы (1)
Вам нужно будет использовать Span-запросы.
Приведенный ниже запрос будет выполнять запрос фразовое соответствие+нечеткое для champions league
, например, например. в примере поля name
типа text
Если вам нужно несколько полей, добавьте еще одно предложение must
.
Обратите внимание, что я упомянул slop:0
и in_order:true
, которые обеспечивают точное совпадение фраз, в то время как вы добиваетесь нечеткого поведения, используя fuzzy
запросы внутри match
запроса.
Образцы документов
POST span-index/mydocs/1
{
"name": "chmpions leage"
}
POST span-index/mydocs/2
{
"name": "champions league"
}
POST span-index/mydocs/3
{
"name": "chompions leugue"
}
Запрос диапазона:
POST span-index/_search
{
"query":{
"bool":{
"must":[
{
"span_near":{
"clauses":[
{
"span_multi":{
"match":{
"fuzzy":{
"testField":"champions"
}
}
}
},
{
"span_multi":{
"match":{
"fuzzy":{
"testField":"league"
}
}
}
}
],
"slop":0,
"in_order":true
}
}
]
}
}
}
Ответ:
{
"took": 19,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 0.5753642,
"hits": [
{
"_index": "span-index",
"_type": "mydocs",
"_id": "2",
"_score": 0.5753642,
"_source": {
"name": "champions league"
}
},
{
"_index": "span-index",
"_type": "mydocs",
"_id": "1",
"_score": 0.5753642,
"_source": {
"name": "chmpions leage"
}
},
{
"_index": "span-index",
"_type": "mydocs",
"_id": "3",
"_score": 0.5753642,
"_source": {
"name": "chompions leugue"
}
}
]
}
}
Позвольте мне знать, если это помогает!
person
Opster ES Ninja - Kamal
schedule
29.11.2018
Итак, нам нужно разделить запрос, например, лига чемпионов, на [чемпионы, лига], а затем сформировать DSL-запрос?
- person StoneLam; 03.04.2019
@StoneLam да, это правильно. Вы можете видеть, как строится запрос для каждого слова. В некотором смысле Span Queries, хотя и многословный и длинный, является более гибким.
- person Opster ES Ninja - Kamal; 03.04.2019
Спасибо @Karmal, я пробую это решение, но нечеткий запрос делает лучший автомобиль лучшим котом. Еще предстоит пройти долгий путь.
- person StoneLam; 08.04.2019
fuzzy
поиск с использованиемmatch_phrase
— это использовать Span Queries. Если это нечеткий поиск по одному полю, мы можем использовать нечеткий запрос, как указано в этой ссылке: elastic.co/guide/en/elasticsearch/reference/current/ - person Opster ES Ninja - Kamal   schedule 29.11.2018