【问题标题】:Elastic search permutation query弹性搜索排列查询
【发布时间】:2020-06-05 17:53:19
【问题描述】:

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

【问题讨论】:

  • 我不知道这是否可能,但您是否考虑过重新设计您的文档以分散单独的令牌,例如 A, B, C 等?那么你可以写一个long bool query或者你可以做一个multi_match查询
  • 请帮助某人解决此问题。
  • 我不明白这个问题。 “ABC”是一部单独的作品,那么有什么(其他)词可以置换?或者你的意思是单词的字母?或者你的意思是“A”,而“B”和“C”是三个词?

标签: elasticsearch elasticsearch-5


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    相关资源
    最近更新 更多