问题是做为两个相邻的单词的短语的搜索与分析的话任意的顺序。elasticsearch:短语搜索以任意顺序的两个相邻字(分析)
E.g.在Sphinx extended syntax terms查询字符串可以写为WordToBeAnalyzed1 NEAR/1 WordToBeAnalyzed2
。然后这两个单词都被分析,并且搜索引擎发现“Word1 Word2”或“Word2 Word1”,其中两个单词可以以任何形式出现(例如“狐狸跳跃”,“跳跃狐狸”,“狐狸跳跃”等等)。
读ES文档我无法表达的ES查询DSL相同的搜索。
当match_phrase
和slop
查询我可以查询一个短语"WordToBeAnalyzed1 WordToBeAnalyzed2"
与"slop": 2
参数去match same words in reverse order。但它也会匹配“Word1 SlopWord1 Word2”和“Word1 SlopWord1 SlopWord2 Word2”等不良变体。
我还试图用span_near
查询与in_order
PARAM,但
span queries are term-level queries, so they have no analysis phase
我会很高兴,如果有人可以点我的方式来解决这个问题。
我从来没有能够找到这个'正确'的方式。过去我们使用了一些解决方法来模仿这一点。一种是在另一个字段(如伪分析器)中对短语中的令牌进行排序,并在搜索时应用相同的排序。另一种方法是将令牌存储为数组并进行术语查询。 – coffeeaddict 2014-09-04 21:47:39
@coffeeaddict谢谢,但看起来我无法正确理解您的解决方法,或者我们正在尝试解决不同的问题。 在索引字符串中对令牌排序,例如“word2 word4 word1 word3”将产生以下一个顺序索引的术语:“word1 word2 word3 word4”。让我们假设需要用任何词序查询词组“word4 word1”。建议的分析器将查询改为'“word1 word4”',但问题是在索引文本“word1”和“word4”有2个单词的距离,所以查询将失败。 你怎么看待'term'查询的单词顺序? – 2014-09-05 08:24:11
是的,你是对的。我应该首先要求澄清你的要求:(我以为你试图做的词组类型匹配索引短语和搜索词组之间的相等数量的记号(只是不是以相同的顺序)。你仍然可以如果您的搜索字词短于索引字词,则可以查询条件,其中minimum_should_match设置为搜索字词中的标记数量。搜索项比索引项 – coffeeaddict 2014-09-05 17:07:23