我的弹性搜索
中包含以下数据集{
"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}}}
]
}}}}}
但我没有得到我期待的结果,这有什么不对?
答案 0 :(得分:1)
您需要使用条款过滤器,而不是 term 过滤器。
根据文档:
术语过滤器:过滤包含术语的字段的文档。
条款过滤器:过滤包含与任何字段匹配的字段的文档 提供条款。
{
"query" : {
"filtered" : {
"filter" : {
"bool" : {
"must" : [
{ "terms" : {"class" : [6001, 6018, 6013]}},
{ "terms" : {"subject" : [5013, 5004]}},
{ "range" : {"salary" : {"gte": 12000,"lte": 15000}}}
]
}}}}}