首页 > 解决方案 > 弹性搜索排列查询

问题描述

我想要一个弹性搜索查询来搜索数据库中单词的排列。例如:- 如果我输入“ABC”,那么它应该搜索[“ABC”、“ACB”、“BAC”、“BCA”、“CAB”、“CBA”]所有的单词组合。

标签: elasticsearchelasticsearch-5

解决方案


应该帮助您的是术语集查询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”是指实际单词并且它们可以作为单独的关键字进行索引,这将起作用。然后,匹配的越多,文档的得分就越高。单词顺序无关紧要,因此这意味着如果您搜索“AB C”,您将匹配包含“AB C”、“BA C”、“CB A”等的文档。通过添加slop参数,您将能够找到文档部分匹配,例如包含“A C”的那个。


推荐阅读