1

Elasticsearch の記事では、1 世代にわたる検索に基づいてオブジェクトを見つける方法について概説しています: 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ましたが、どちらも機能しません。bool で has_child を使用することはできません。

4

1 に答える 1

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"
                     }
                  }
               ]
            }
         }
      }
   }
}

クエリを「AND」ではなく「OR」にしたい場合は、"should"代わりに を使用し"must"ます。

問題を回避するために設定したコードを次に示します。

http://sense.qbox.io/gist/cf4babbbd25a3b7a26f3ea9ce9c1b686e37dbcb9

于 2015-10-30T02:42:12.633 に答える