【问题标题】:How to search multiple generations in Elasticsearch如何在 Elasticsearch 中搜索多代
【发布时间】:2015-10-29 22:19:00
【问题描述】:

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 一起使用。

【问题讨论】:

  • 你能分享你目前的查询和你得到的错误吗?

标签: ruby-on-rails ruby-on-rails-3 elasticsearch elasticsearch-rails


【解决方案1】:

我能够使用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

【讨论】:

  • 啊,是的。我想我错过了must
猜你喜欢
  • 2022-06-18
  • 1970-01-01
  • 1970-01-01
  • 2015-03-20
  • 2018-05-29
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 2018-01-08
相关资源
最近更新 更多