ElasticSearch匹配多个字段,不同的slops

时间:2014-02-25 04:26:00

标签: lucene elasticsearch

我有一个multi_match查询。有两个领域,我希望他们两个不同的slop。 现在,两者的坡度都是1,但对于生物,我想要slop为1而且对于位置,我想要slop为2.我怎么能这样做?

这就是我现在的查询:

{
   "query":{
      "multi_match":{
         "query":"San Diego",
         "type":"phrase",
         "slop":1,
         "fields":[
            "bio","location"

         ]
      }
   },
   "sort":[
      {
         "_score":"desc"
      }
   ],
   "size":50,
   "from":0,
   "fields":[
      "id",
      "bio",
      "location",

   ]

1 个答案:

答案 0 :(得分:0)

所有多匹配查询都会生成匹配查询,并将其包装在dismax query中。这很方便,但如果您需要以不同方式配置每个匹配查询,您可以自己创建这种查询:

"dis_max" : {
    "queries" : [
        {
            "match" : {
                "bio" : {
                    "query" : "San Diego",
                    "type" : "phrase",
                    "slop" : 1
                }
            }
        },
        {
            "match" : {
                "location" : {
                    "query" : "San Diego",
                    "type" : "phrase",
                    "slop" : 2
                }
            }
        }
    ]
}