如何在 Elasticsearch 中搜索多代
How to search multiple generations in Elasticsearch
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"
}
}
}
}
}
}
}
如果我还想查询以 "liverpool" 开头的 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 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
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"
}
}
}
}
}
}
}
如果我还想查询以 "liverpool" 开头的 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 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