如何使用minimum_should_match在多个字段中搜索?

时间:2014-03-27 18:05:57

标签: search elasticsearch indexing

我正在尝试过滤弹性搜索的结果,它必须返回与搜索文本80%兼容的结果。

当我只为一个键执行此操作时,minimum_should_match完美无缺:

{
       "size":30,
       "from":930,
       "query":{
          "filtered":{
             "query":{
                "query_string":{
                   "default_field":"campo1",
                   "query":"portugues",                  
                   "minimum_should_match":"80%"
                }
             }
          }
       }
    }

当我使用多个密钥进行搜索时,minimum_should_match无法正常工作,请以70%的兼容性返回结果:

{
       "size":30,
       "from":123420,
       "query":{
          "filtered":{
             "query":{
                "query_string":{
                   "default_operator":"or",
                   "query":"portugues",
                   "fields":[
                      "campo1",
                      "campo2^5",
                      "campo3"
                   ],
                   "minimum_should_match":"80%"
                }
             }
          }
       }
    }

据我所知,我需要按键设置minimum_should_match,但我不知道如何做同样的事情。 如果有人可以帮助我这样做,那就太棒了。

1 个答案:

答案 0 :(得分:9)

我需要使用boolmulti_match,这是正确的方法:

{
   "size":"30",
   "from":0,
   "query":{
      "filtered":{
         "query":{
            "bool":{
               "should":[
                  {
                     "multi_match":{
                        "query":"portugues",
                        "type":"cross_fields",
                        "fields":[
                           "campo1^3",
                           "campo2^5",
                           "campo3^3"
                        ],
                        "minimum_should_match":"80%"
                     }
                  }
               ]
            }
         }
      }
   }
}