弹性搜索排列查询

3

我希望能够使用弹性搜索查询从数据库中搜索单词的排列组合。 例如:如果我输入"ABC",则应该搜索["ABC", "ACB", "BAC", "BCA", "CAB", "CBA"]中的所有单词组合。


1
我不确定是否可能,但您是否考虑重新设计文档以展开像 A,B,C 等个体标记?然后您可以编写一个 long bool query 或者您可以执行一个 multi_match 查询。 - JBone
请帮助某人解决这个查询。 - satish sehgal
我不理解这个问题。"ABC"是一个单词,所以还有什么其他的单词可以排列?或者你是指这个单词的字母?或者你的意思是"A"、"B"和"C"是三个单词吗? - GPI
1个回答

0

有助于您的是术语集查询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

如果您指的是实际单词并且它们可以作为独立关键字索引,那么这应该能够工作。匹配的关键词越多,文档得分就越高。并且单词顺序将不重要,这意味着如果您搜索"A B C",则会匹配包含"A B C"、"B A C"、"C B A"等内容的文档。通过添加参数,您可以找到部分匹配的文档,例如包含"A C"的文档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接