5

私のマッピングは次のとおりです。

"properties": {
  "user": {
    "type": "nested",
    "properties": {
      "id": {
        "type": "integer"
      },
      "is_active": {
        "type": "boolean",
        "null_value": false
      },
      "username": {
        "type": "string"
      }
    }
  },

userフィールドを持たないすべてのドキュメントを取得したい。

私は試した:

GET /index/type/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "exists": {
            "field": "user"
          }
        }
      ]
    }
  }
}

すべてのドキュメントを返します。ElasticSearch 2.xに基づいて、入れ子になったフィールドのフィルタが存在しないため、次のことも試しました。

GET /index/type/_search
{
  "query": {
    "nested": {
      "path": "user",
      "query": {
        "bool": {
          "must_not": [
            {
              "exists": {
                "field": "user"
              }
            }
          ]
        }
      }
    }
  }
}

0 ドキュメントを返します。

userフィールドが欠落しているすべてのドキュメントを取得するための正しいクエリは何ですか?

4

2 に答える 2

10

正しい構文を見つけました。次のようにする必要があります。

GET /index/type/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "nested": {
            "path": "user",
            "query": {
              "exists": {
                "field": "user"
              }
            }
          }
        }
      ]
    }
  }
}
于 2017-01-04T10:30:24.813 に答える
0

ユーザーの親、ここではobjを使用してみてください

GET users/users/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "exists": {
            "field": "obj.user"
          }
        }
      ]
    }
  }
}   
于 2016-12-21T15:09:25.667 に答える