Elasticsearch会过滤多个字段

时间:2015-07-19 10:40:20

标签: elasticsearch

我的弹性搜索

中包含以下数据集
{
"title": "Professor",
"class": [6001, 6015, 6018],
"subject": [5010, 5012, 5013],
"salary": 12500
}

{
"title": "Professor",
"class": [6012, 6013, 6014],
"subject": [5010, 5005, 5004],
"salary": 16600
}

{
"title": "Principal",
"class": [7001, 7010, 6018],
"subject": [5010, 5012, 5013],
"salary": 14750
}

{
"title": "Asst Professor",
"class": [6012, 6013, 6014],
"subject": [5010, 5005, 5004],
"salary": 16600
}

我正在尝试搜索

class - 6001 OR 6018 OR 6013 和 主题 - 5013或5004 和 薪水(范围) - 12000到15000

我正在使用以下查询

{
   "query" : {
      "filtered" : {
         "filter" : {
            "bool" : {            
                  "must" : [
                    { "term" : {"class" : [6001, 6018, 6013]}}, 
                    { "term" : {"subject" : [5013, 5004]}},
                    {"range" : {"salary" : {"gte": 12000,"lte": 15000}}}
                  ]
                }}}}}

但我没有得到我期待的结果,这有什么不对?

1 个答案:

答案 0 :(得分:1)

您需要使用条款过滤器,而不是 term 过滤器。

根据文档:

  

术语过滤器:过滤包含术语的字段的文档。

     

条款过滤器:过滤包含与任何字段匹配的字段的文档   提供条款。

{
   "query" : {
      "filtered" : {
         "filter" : {
            "bool" : {            
                  "must" : [
                    { "terms" : {"class" : [6001, 6018, 6013]}}, 
                    { "terms" : {"subject" : [5013, 5004]}},
                    { "range" : {"salary" : {"gte": 12000,"lte": 15000}}}
                  ]
                }}}}}