在数组中搜索时,在Elasticsearch中进行“bool”过滤

时间:2014-06-09 10:56:50

标签: elasticsearch

我对Elasticsearch中的过滤器有所了解。我试图构建一个过滤器来搜索具有嵌套数组的索引。

     "bParams": {
                 "bParamList": [
                    {
                       "bParamId": 298,
                       "year": 2008,
                       "quarter": 4,
                       "value": 239698
                    },
                    {
                       "bParamId": 298,
                       "year": 2009,
                       "quarter": 4,
                       "value": 453
                    },
                    {
                       "bParamId": 298,
                       "year": 2007,
                       "quarter": 4,
                       "value": 190000
                    },
                    {
                       "bParamId": 304,
                       "year": 2009,
                       "quarter": 4,
                       "value": 7000
                    }
                 ]
             }

请求是:

 {
    "query": {
      "filtered": {
         "filter": {
            "bool": {
                "must": [
                    {
                        "term": {
                            "bParams.bParamList.year": [ 2007 ]
                        }
                    },
                    {
                        "range": {
                            "bParams.bParamList.value": {
                                "from": 1,
                                "to": 453
                            }
                        }
                    },
                    {
                        "term": {
                            "bParams.bParamList.bParamId": [ 304 ]
                        }
                    }
                ]
              }
          }
       }
    }
 }

我希望查询不会返回任何结果,但会返回结果。我知道有些元素具有适当的价值。我需要同时考虑所有请求参数。

1 个答案:

答案 0 :(得分:0)

您需要使用nested - 映射,并且您必须重新索引才能添加它。

没有nested,索引的内容基本上与此相同:

{
    "bParams": {
        "bParamList": {
            "bParamId": [298, 298, ...],
            "year": [2008, 2009, ...],
            "quarter": [4, 4, ...],
            "value", [239698, 453, ...],
    }
  }
}