@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 то нет поиска по окончаниям и вообще если вдруг в слове есть ошибки
  • Вопрос задан
  • 2702 просмотра
Пригласить эксперта
Ответы на вопрос 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"
					}
				}
			}
		}
	}
}


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

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

Похожие вопросы
SpectrumData Екатеринбург
от 300 000 до 400 000 ₽
LIME Москва
от 280 000 до 350 000 ₽
22 нояб. 2024, в 19:51
15000 руб./за проект
22 нояб. 2024, в 19:15
200000 руб./за проект