問題是做爲兩個相鄰的單詞的短語的搜索與分析的話任意的順序。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