我正在尝试编写一个查询,要求“区域”为530,“开始”为06192013或“区域”为“530”,“开始”为“空白”。另外,在这两种情况中,“空间”是“顶部”或“空间2”是“底部”。这个查询似乎抓住了与这些场景相匹配的任何东西,如何更改它以使其像我想的那样工作?
{
"size":25,
"from":0,
"query": {
"custom_filters_score": {
"query": {
"filtered": {
"query": {
"bool": {
"must": [
{"term":{"type":"ghost"}},
{"term":{"area":"530"}}
]
}
},
"filter" : {
"or": [
{"terms":{"space": ["top"]}},
{"terms":{"space2":["bottom"]}},
{
"and": [
{"term":{"area":"530"}},
{"term":{"start":"06192013"}}
]
},
{
"and": [
{"term":{"area":"530"}},
{"term":{"starts":"blank"}}
]
}
]
}
}
},
"filters": [
{"filter":{"term":{"filter1":5743}}, "boost":"1000"},
{"filter":{"term":{"filter2":4451}}, "boost":"64"},
{"filter":{"term":{"filter3":["tech"]}}, "boost":"16"},
{"filter":{"terms":{"filter4":[]}}, "boost":"8"},
{"filter":{"terms":{"filter5":[]}}, "boost":"5"},
{"filter":{"term":{"access":"1"}}, "boost":"2"}
],
"score_mode":"total"
}
}
}
答案 0 :(得分:1)
你快到了!试试这个:
...
"query" : { "match_all":{} },
"filter" : {
"and": [
{
"or": [
{"term":{"space": "top"}},
{"term":{"space2":"bottom"}}
]
},
{
"and": [
{"term":{"area":"530"}},
{
"or": [
{"term":{"start":"06192013"}},
{"term":{"starts":"blank"}}
]
}
]
}
]
}
...
除非你需要得分(看起来不像),否则你应该使用过滤器完成所有这些操作,但是由于这个原因,它们不能计算得分并且速度更快。
"query" : { "match_all":{} }
最终会让所有与过滤器匹配相同分数的文档。
注意:我还将您的terms
查询与一个元素的数组转换为term
查询...