Я хочу, чтобы эластичный поисковый запрос искал перестановку слов из базы данных. например: - если я ввожу "ABC", тогда он должен искать ["ABC", "ACB", "BAC", "BCA", "CAB", "CBA"] strong> все сочетания слов.
Эластичный поисковый перестановочный запрос
- Я не знаю, возможно ли это, но задумывались ли вы о том, чтобы изменить дизайн своего документа, чтобы распределить отдельные токены, такие как
A, B, C
и т. д.? тогда вы можете написатьlong bool query
или сделатьmulti_match
запрос 21.02.2020 - пожалуйста, помогите кому-нибудь решить этот запрос. 11.03.2020
- Я не понимаю вопрос. Азбука — это единое произведение, так какие (другие) слова нужно переставлять? Или вы имели в виду буквы слова ? Или вы имеете в виду А, а Б и В — три слова? 14.09.2020
Ответы:
Вам поможет запрос набора условий https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-set-query.html
Фактическая реализация будет слишком сложной, чтобы поместить ее здесь в качестве ответа, а также слишком специфичной для вашей настройки. Но если вы проиндексируете свои документы способом, описанным по ссылке выше, чтобы A, B и C были токенами массива, вы сможете искать по всем перестановкам этих токенов.
Другим вариантом будет использование запроса match_phrase https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query-phrase.html
Это будет работать, если под ABC вы имели в виду настоящие слова, и они могут быть проиндексированы как отдельные ключевые слова. Тогда чем больше из них совпадет, тем выше оценка документа. И порядок слов не имеет значения, поэтому это будет означать, что если вы ищете A B C, вы найдете документы, содержащие A B C, B A C, C B A и т. д. Добавив параметр slop
, вы сможете найти документы, которые частично совпадают, например, тот, который содержит A С.