2016-01-28 48 views
0

我想知道Elasticsearch是否有可能排除查詢是單個詞的查詢?我試圖使用「minimum_should_match」作爲2,當查詢有2個或更多的術語時,這很好用。但是,如果查詢中的術語數爲1,ES仍然會返回結果。看來ES使用的邏輯是「你要求最少匹配兩個詞,但只有一個詞匹配;我們將最小值降到1」。有沒有辦法關閉這個功能,或以其他方式做我正在尋找的?Elasticsearch:排除只有一個詞的查詢

對於那些想知道爲什麼不能在API級別完成的問題,我正在使用排除停用詞的查詢分析器。所以像「a ipad」這樣的查詢最終會成爲1期,而API將會看到2. API可以做stopword過濾,但這似乎是浪費資源。

+0

似乎就像在文檔中一樣:「(即:無論計算結果的結果多麼低或多高,所需匹配的最小數量永遠不會低於1或大於子句的數量)」。似乎也許minimum_should_match不是我所需要的這 – mrquintopolous

+0

你到底在看什麼?minimum_clause或minimum_terms?你能提供幾份文件嗎? – ChintanShah25

+0

究竟是minimum_clause還是minimum_terms?谷歌搜索什麼都沒有。我喋喋不休地說,「在搜索之前,查詢中需要超過x個條件」。我會提供文件,但他們實際上並沒有任何關係。 minimum_should_match參數運行良好。當設置爲2時,2個查詢條件必須與要返回的文檔相匹配。但是這隻有在查詢中有2個或更多項時纔有效!當查詢中有一個術語時,ES仍然匹配文檔。 – mrquintopolous

回答

1

在進行查詢之前,您可以先通過自定義分析器分析輸入。 您可以使用Analyze API(確保將分析儀屬性設置爲等於您的自定義分析儀名稱)。

結果將是分析的令牌列表。如果您的分析儀刪除了停用詞,它將僅返回ipada ipad

因此,如果分析API只返回一個令牌你其實並不需要查詢Elasticsearch,因爲你不希望任何結果的令牌數小於2(如果我理解正確的你)

+0

Ahhh我明白了,所以我必須對ES進行潛在的兩個調用,第一個調用處理後的查詢。這就說得通了。太糟糕了,沒有辦法用索引中的一些參數來做到這一點,但這應該做到。我會繼續問一些問題,看看是否有人有一些ES魔法可以做到這一點。謝謝! – mrquintopolous