多重匹配必须在弹性搜索中不起作用

时间:2015-12-17 14:40:25

标签: elasticsearch

下面的查询是获取结果,如果我给现有记录很好,但是如果我将名字字段从“John”更改为“John1”,那么仍然记录正在获取。

{
 "query" : {
            "bool" : {
              "must" : [
                 { "match" : {"employeeId" : "1234"}}, 
                 { "match" : {"name" : "John"}} 
              ]
           }
   }
}

我尝试了另一个替代查询,但仍然给出了result.which查询在性能方面是否正确?但如果我将名称记录从'John'更改为'John1'

,两者都会给出结果
{

 "filter": {
  "bool" : {
    "must" : {
      "term" : {
        "employeeId" : "1234"
      }
     }
    }
    },
    "query": {
      "match" : {
        "name" : {
          "query" : "John",
          "type" : "phrase"
        }
      } 
   }
}

1 个答案:

答案 0 :(得分:0)

这是因为您正在进行匹配,如果您想进行精确搜索,则需要使用过滤器 请注意,我们假设分析名称列的映射

{
    "query" :{
        "filtered" : {
            "filter" : {
                "bool" : {
                  "must" : [
                     { "term" : {"employeeId" : "1234"}}, 
                     { "term" : {"name" : "john"}} 
                  ]
               }
          }
       }
    }
}