2015-07-19 183 views
0

我有數據集按照我elasticsearch索引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 
} 

我試圖尋找

類 - 6001或6018或6013 和 主題 - 5013或5004 AND 工資(範圍) - 12000至15000

我正在使用以下查詢

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

但我沒有得到我期待的結果,這有什麼錯?

回答

0

您需要使用條款過濾器而不是條款過濾器。

按照文檔:

期限過濾:過濾器具有包含一個術語域的文檔。

條款篩選:篩選字段與 提供的任何條款匹配的字段。

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

這工程!術語之間如何應用AND運算符? – syv