使用多级“bool查询”查询弹性搜索

时间:2013-09-04 14:32:49

标签: elasticsearch

我正在尝试使用ElasticSearch实现搜索系统。 我的问题在于对象的位置首先,搜索到的对象可以有不同类型的位置:

  • 国家
  • 国家+州
  • 国家+州+区

以下是一个例子:

Country = A
State = B
District = C

Currently I get all the objects that have the location :
Country = A and State = B and District = C

I want also find objects which have the location:
only Country = A
and
only Country = A and State = B

解释起来有点复杂,但原则是。

所以我创建了以下查询ElasticSearch:

"query" : {
        [{"bool":{
            "should":[
                {"bool":{
                     "must":[
                         {"match":{"country":"-223"}},
                         {"match":{"state":"-3760"}},
                         {"match":{"district":"-8245"}}
                     ]
                }},
                {"bool":{
                     "must":[
                         {"match":{"country":"-223"}},
                         {"match":{"state":"-3760"}},
                         {"match":{"district":""}}
                      ]
                }},
                {"bool":{
                     "must":[
                         {"match":{"country":"-223"}},
                         {"match":{"state":""}},
                         {"match":{"district":""}}
                      ]
                }}
            ]
        }}]
  } 

但它不起作用,我真的不知道我做错了什么。 我阅读了这个网站上的文档:

http://www.elasticsearch.org/guide/reference/query-dsl/bool-query/

我尝试了一切似乎对我的问题有用但却没有成功 有人可以帮我找到错误吗?

谢谢你。

1 个答案:

答案 0 :(得分:1)

我这样做是通过不同的方式索引数据位。

对于每个文档,我在每个文档的位置字段中索引多个值,即:

country
country/state
country/state/district

如果我想找到某个国家/地区的所有内容,我会搜索位置:国家/地区,如果我想要某些状态我搜索位置:国家/地区

这具有对嵌套分面非常好的副作用。