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
,但是它也不起作用;我不能在 bool(boolean) 中使用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
关于ruby-on-rails - 如何在Elasticsearch中搜索多代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33425622/