2014-09-04 88 views
1

問題是做爲兩個相鄰的單詞的短語的搜索與分析的話任意的順序。elasticsearch:短語搜索以任意順序的兩個相鄰字(分析)

E.g.在Sphinx extended syntax terms查詢字符串可以寫爲WordToBeAnalyzed1 NEAR/1 WordToBeAnalyzed2。然後這兩個單詞都被分析,並且搜索引擎發現「Word1 Word2」或「Word2 Word1」,其中兩個單詞可以以任何形式出現(例如「狐狸跳躍」,「跳躍狐狸」,「狐狸跳躍」等等)。

讀ES文檔我無法表達的ES查詢DSL相同的搜索。

match_phraseslop查詢我可以查詢一個短語"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

我會很高興,如果有人可以點我的方式來解決這個問題。

+1

我從來沒有能夠找到這個'正確'的方式。過去我們使用了一些解決方法來模仿這一點。一種是在另一個字段(如僞分析器)中對短語中的令牌進行排序,並在搜索時應用相同的排序。另一種方法是將令牌存儲爲數組並進行術語查詢。 – coffeeaddict 2014-09-04 21:47:39

+0

@coffeeaddict謝謝,但看起來我無法正確理解您的解決方法,或者我們正在嘗試解決不同的問題。 在索引字符串中對令牌排序,例如「word2 word4 word1 word3」將產生以下一個順序索引的術語:「word1 word2 word3 word4」。讓我們假設需要用任何詞序查詢詞組「word4 word1」。建議的分析器將查詢改爲'「word1 word4」',但問題是在索引文本「word1」和「word4」有2個單詞的距離,所以查詢將失敗。 你怎麼看待'term'查詢的單詞順序? – 2014-09-05 08:24:11

+0

是的,你是對的。我應該首先要求澄清你的要求:(我以爲你試圖做的詞組類型匹配索引短語和搜索詞組之間的相等數量的記號(只是不是以相同的順序)。你仍然可以如果您的搜索字詞短於索引字詞,則可以查詢條件,其中minimum_should_match設置爲搜索字詞中的標記數量。搜索項比索引項 – coffeeaddict 2014-09-05 17:07:23

回答

2

約首先通過明確要求運行查詢到_analyze API,那麼span_near查詢什麼?

+0

感謝您解決方法如果沒有可能在單個查詢請求中執行此操作,我可能會明確使用分析器 – 2014-09-05 07:59:35

+0

我的應用程序中有一組固定的查詢根據從關係數據庫獲取的數據生成。因此,我只能分析一次所有字符串,並從數據庫中進行「span_near」查詢。 – 2014-09-05 08:07:24

+0

另一個解決方法。也許是出於性能的考慮,當查詢事先不知道這將是更好的查詢這兩種型號:'「WordToBeAnalyzed1 WordToBeAnalyzed2」'和'「WordToBeAnalyzed2 WordToBeAnalyzed1」'在單個查詢(被證明這需要測試)。 但不是在我的情況(見前面的評論)。 – 2014-09-05 08:31:00