我已经编写了一些代码(java / spring),它允许用户选中复选框,然后构建一个elasticSearch查询。到目前为止,这一点一直很好,因为要求是不同类别的术语应该是AND查询,因此可以循环遍历分层选择框,构建术语匹配(OR查询)然后将它们组合并构建一个布尔术语沿这些行查询
{
"bool" : {
"must" : [ {
"terms" : {
"field1" : [ "term1", "term2" ]
}
}, {
"terms" : {
"field2" : [ "term3" ]
}
} ]
}
有一个新的要求,要做一些顶级框OR查询,所以在这些情况下,我需要的东西
{
"query": {
"bool" : {
"must" : {
"terms" : { "field1" : ["term1"] , "field1" : ["term2"] }
}
}
}
}
我认为这是不可能的(elasticSearch 2.4.1),因为我收到错误
"type": "query_parsing_exception",
"reason": "[terms] query does not support multiple fields",...
我猜我应该将其移到过滤查询中,但我想知道是否有人可以确认这是最简单最有效的变更(在这个阶段,我正在寻找变化最小的路径)?
答案 0 :(得分:4)
解决方案只是在第一个查询中使用java
而不是should
:
must
答案 1 :(得分:3)
试试这个: -
{
"query": {
"bool": {
"must": [{
"term": {
"field1": "1"
}
},
{
"term": {
"field12": "1"
}
}
]
}
}
}