2014-02-12 49 views
1

我想弄清楚如何在Elasticsearch中實現以下內容,並感覺好像我之前已經閱讀過有關如何去做但不能再找到它的文檔。是否可以確保在Elasticsearch中進行搜索的n匹配?

我有3個字段,我將搜索; profileIds,標題和說明。

對於個人資料ID我只是尋找一個確切的詞匹配,這是足夠小的。

我將有一個短語列表來匹配標題和描述,但我只想匹配,如果總共有3個或更多與任何關鍵字匹配的標題或描述(它不一定是相同字段中的相同關鍵字)。 (匹配配置文件ID,(有3個匹配任何關鍵字的標題或描述))但我掙扎的部分是說「3匹配」。

這可能在Elasticsearch?

回答

0

您可以使用bool query連同terms query並使用minimum_should_match來嘗試。

例子:

{ 
    "query": { 
    "bool": { 
     "must": [ 
      { 
       "term": { 
       "profile_ids": { 
        "value": "42" 
       } 
       } 
      } 
     ], 
     "should": [ 
      { 
       "terms": { 
       "title": ["foo", "bar", "baz"], 
       "minimum_should_match": 3 
       } 
      }, 
      { 
       "terms": { 
       "description": ["a", "b", "c", "d"], 
       "minimum_should_match": 3 
       } 
      } 
     ], 
     "minimum_should_match": 1 
    } 
    } 
} 

所以terms查詢都必須在至少3個關鍵字匹配。然後其中一個應該匹配,而profile_ids必須始終匹配。

請注意,如果您的關鍵字少於3個,則terms查詢將匹配所有條款匹配。

+0

重讀這個問題後,我發現這不完全正確。要求是在兩個字段中共有3個匹配,而不是兩個字段之一的3個匹配。我現在就離開它,它可能仍然有幫助。 – dnll

相關問題