如何在术语查询中模拟多个字段

时间:2017-04-26 11:54:24

标签: elasticsearch

我已经编写了一些代码(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",...

我猜我应该将其移到过滤查询中,但我想知道是否有人可以确认这是最简单最有效的变更(在这个阶段,我正在寻找变化最小的路径)?

2 个答案:

答案 0 :(得分:4)

解决方案只是在第一个查询中使用java而不是should

must

答案 1 :(得分:3)

试试这个: -

{
    "query": {
        "bool": {
            "must": [{
                    "term": {
                        "field1": "1"
                    }
                },
                {
                    "term": {
                        "field12": "1"
                    }
                }
            ]
        }
    }
}