2016-06-09 133 views
0

我是ElasticNoob,但我一直在用一些簡單的短語匹配玩弄如下:ElasticSearch部分短語匹配

query: { 
    match_phrase: { 
    my_field: { 
     query: "silly dogs playing about", 
     slop: 100 
    } 
    } 
} 

但這一點也不遜色於有所有 4項(傻項,狗,玩,約)。理想情況下,還是會匹配像它沒有「左右」的關鍵字(因爲這一點會得到較低的分數)「被打傻狗」。

這似乎是一個非常常見的用於文本搜索引擎的用例,所以我想我的Google-fu一定很弱,因爲在彈性搜索中找不到任何關於部分詞組匹配的內容。

有人可以在這裏指出我正確的方向嗎?只是要清楚:

  • 秩序的關鍵字事項match_phraseslop使我們能夠做到這一點)
  • 一些關鍵字匹配問題(match_phrase根本不包括的項目如果任何關鍵字失蹤 - 這是不理想的我的情況)

謝謝!

回答

3

Recomended解決方法是:

代替使用接近匹配作爲絕對要求的,我們可以 使用它作爲一個信號作爲潛在的許多查詢中的一個,其中每個 有助於整體的成績。每個文檔(請參閱大多數字段)。

在這裏你的文章描述它:https://www.elastic.co/guide/en/elasticsearch/guide/current/proximity-relevance.html

所以您的查詢看起來像:

query: { 
    bool: { 
     must: { 
     match: { 
      my_field: { 
      query: "silly dogs playing about", 
      minimum_should_match: "30%" 
      } 
     } 
     }, 
     should: { 
     match_phrase: { 
      my_field: { 
      query: "silly dogs playing about", 
      slop: 50 
      } 
     } 
     } 
    } 
    } 
+0

啊,正是我要找的 - 謝謝!發揮魅力。 – JoeRocc

0

可以使用可變調用minimum_should_match要麼指定的,需要的話百分比匹配或指定多少話應該匹配。

query: { 
    match_phrase: { 
    my_field: { 
     query: "silly dogs playing about", 
     slop: 100, 
     minimum_should_match: "75%" 
    } 
    } 
} 

這意味着4個單詞中至少有3個需要匹配才能成功。

+0

這將無法正常工作。 'match_phrase'不支持'minimum_should_match'參數。 –