Elasticsearch的文章概述了如何根据一代搜索来查找对象:https://www.elastic.co/guide/en/elasticsearch/guide/current/grandparents.html
GET /company/country/_search
{
"query": {
"has_child": {
"type": "branch",
"query": {
"has_child": {
"type": "employee",
"query": {
"match": {
"hobby": "hiking"
}
}
}
}
}
}
}
如果我还想查询name
从"利物浦"开始的分支怎么办?你如何修改这个搜索来找到它?我不断收到格式错误,而且我似乎无法找到有关如何在线查询嵌套的信息。
我已经尝试了这个(它没有用):
GET /company/country/_search
{
"query": {
"has_child": {
"type": "branch",
"query": {
"has_child": {
"type": "employee",
"query": {
"match": {
"hobby": "hiking"
}
}
},
"match": {
"name": "london"
}
}
}
}
}
我收到一条错误,指出查询格式错误。
我试过了bool
,但它也没有用;我不能将has_child与bool一起使用。
答案 0 :(得分:0)
我能够使用bool query。
如果我正确理解你的问题,这应该做你想要的:
POST /company/country/_search
{
"query": {
"has_child": {
"type": "branch",
"query": {
"bool": {
"must": [
{
"has_child": {
"type": "employee",
"query": {
"match": {
"hobby": "hiking"
}
}
}
},
{
"match": {
"name": "liverpool"
}
}
]
}
}
}
}
}
如果您希望查询为“OR”而不是“AND”,请使用"should"
代替"must"
。
以下是我设置的一些代码来解决这个问题:
http://sense.qbox.io/gist/cf4babbbd25a3b7a26f3ea9ce9c1b686e37dbcb9