带有术语过滤器的弹性搜索过滤查询

时间:2015-10-21 15:04:29

标签: elasticsearch

我对过滤后的查询存在问题。当我运行以下查询时:

{
"query":{
  "filtered":{
     "query":{
        "regexp":{
           "name":"chri.*"
        }
     },
     "filter":{
        "bool":{
           "must":[
                {"term": { "accountNonLocked": "false" }}
            ]
        }
     }
  }
},"fields" : ["name", "id", "accountNonLocked","role"], 
"from" : 0, 
"size" : 10
}

我得回应

{
"took": 4,
  "timed_out": false,
  "_shards": {
     "total": 5,
     "successful": 5,
     "failed": 0
  },
  "hits": {
  "total": 2,
  "max_score": 1,
  "hits": [
  {
    "_index": "candidatindex",
    "_type": "job",
    "_id": "54c7867ecfcbbe42dc000478",
    "_score": 1,
    "fields": {
      "name": [
        "Christophe toto"
      ],
      "accountNonLocked": [
        true
      ],
      "role": [
        "DHR"
      ]
    }
  },
  {
    "_index": "candidatindex",
    "_type": "job",
    "_id": "54c7867ecfcbbe42dc000468",
    "_score": 1,
    "fields": {
      "name": [
        "Christophe Toto"
      ],
      "accountNonLocked": [
        true
      ],
      "role": [
        "CANDIDATE"
      ]
    }
  }
  ]}
}

但是当我在这个角色上添加一个过滤器时:

{
"query":{
  "filtered":{
     "query":{
        "regexp":{
           "name":"chri.*"
        }
     },
     "filter":{
        "bool":{
           "must":[
                {"term": { "accountNonLocked": "false" }},
                {"term": { "role": "CANDIDATE" }}
            ]
        }
     }
  }
},"fields" : ["name", "id", "accountNonLocked","role"], 
"from" : 0, 
"size" : 10
}

然后我得到一个空的结果:

{
"took": 3,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 0,
    "max_score": null,
    "hits": []
  }
}

有谁能告诉我我做错了什么?

1 个答案:

答案 0 :(得分:2)

您的role字段可能是analyzed字符串。 所以要么尝试使用像

中的小写值
 {"term": { "role": "candidate" }}

或将role字段的映射更改为not_analyzed(您需要重新索引数据以使更改生效)