Задать вопрос
@gulitskiy

Как искать фразы в elasticsearch с fuzzy?

у меня база еластик, там есть данные, и такая настройка индекеса

index_ru:
        type: custom
        tokenizer: standard
        filter: [word_delimiter, lowercase, stopwords_ru, stop, russian_morphology, english_morphology, unique]
        char_filter: [html_strip]
      search_ru:
        type: custom
        tokenizer: standard
        filter: [word_delimiter, lowercase, stopwords_ru, stop, russian_morphology, english_morphology, unique]
        char_filter: [html_strip]


делаю такой запрос на поиск

{
	"query": {
		"filtered": {
			"query": {
				"match": {
					"fullText": {
						"query": "российская федерация",
						"fuzziness": "AUTO",
						"operator":  "and",
					}
				}
			},
			"filter": {
				"range": {
					"pubDate": {
						"gte": "2015-08-03"
					}
				}
			}
		}
	}
}


работает хорошо, но он выводит все документы которые содержат оба слова в тексте независимо от расположения, а надо чтобы выводил только те в которых эти слова друг за другом.

Если использовать match_phrase то нет поиска по окончаниям и вообще если вдруг в слове есть ошибки
  • Вопрос задан
  • 2841 просмотр
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Аналитик SOC
    4 месяца
    Далее
  • Merion Academy
    Базы данных с нуля
    2 месяца
    Далее
  • OTUS
    PHP Developer. Professional
    5 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
@gulitskiy Автор вопроса
{
	"query": {
		"filtered": {
			"query": {
				"span_near" : {
					"clauses" : [
						{
							"span_multi": {
								"match": {
									"fuzzy": {
										"fullText": {
											"fuzziness": "AUTO",
											"value": "российская"
										}
									}
								}
							}
						},
						{
							"span_multi": {
								"match": {
									"fuzzy": {
										"fullText": {
											"fuzziness": "AUTO",
											"value": "федерация"
										}
									}
								}
							}
						}
					],
					"slop" : 2,
					"in_order" : true,
					"boost" : 20
				}
			},
			"filter": {
				"range": {
					"pubDate": {
						"gte": "2015-01-01"
					}
				}
			}
		}
	}
}


составил такой запрос, пока все работает как надо, по поводу производительности незнаю, пока мало документов для анализа.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Principal Recruitment Москва
от 200 000 до 250 000 ₽
Principal Recruitment Москва
от 200 000 до 350 000 ₽
Principal Recruitment Москва
от 200 000 до 350 000 ₽