2015-04-14 134 views
7

如何將模糊添加到multi_match查詢中?所以如果有人要搜索'籃球',它仍然會找到'棒球'的文章。目前我的查詢是這樣的:使用模糊性對多個字段進行ElasticSearch multi_match查詢

POST /newspaper/articles/_search 
{ 
    "query": { 
     "function_score": { 
      "query": { 
       "multi_match": { 
        "query": "baseball", 
        "type": "phrase", 
        "fields": [ 
         "subject^3", 
         "section^2.5", 
         "article^2", 
         "tags^1.5", 
         "notes^1" 
        ] 
       } 
      } 
     } 
    } 
} 

一種選擇我一直在尋找是做這樣的事情,只是不知道這是不是最好的選擇。根據得分保持排序很重要:

"query" : { 
     "query_string" : { 
     "query" : "subject:basball^3 section:basball^2.5 article:basball^2", 
     "fuzzy_prefix_length" : 1 
     } 
    } 

建議?

回答

18

要添加模糊的multiquery你需要添加模糊屬性如下所述:

{ 
    "query": { 
     "function_score": { 
      "query": { 
       "multi_match": { 
        "query": "baseball", 
        "type": "phrase", 
        "fields": [ 
         "subject^3", 
         "section^2.5", 
         "article^2", 
         "tags^1.5", 
         "notes^1" 
        ], 
        "fuzziness" : "AUTO", 
        "prefix_length" : 2 

       } 
      } 
     } 
    } 
} 

請注意,的prefix_length在doc解釋:

的字符的數目,其不會被「模糊化」。這有助於減少必須檢查的術語數量。默認爲0.

要檢查模糊性的可能值請訪問ES docs

+0

這不適用於ES 6:'模糊不允許類型[短語]' – Alphaaa

相關問題