2015-04-14 132 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

相关问题