2016-12-21 10 views
1

Моего отображения:Elasticsearch 2,4, Exists фильтра для вложенных объектов не работает

"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 exists filter for nested field doesn't work, я также пытался:

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

который возвращает 0 документов.

Каков правильный запрос, чтобы получить все документы без поля user?

+0

Вы можете попытаться проверить существование ' user.id' вместо этого? Если родительский документ не имеет поля 'user', то он также не будет содержать поля' user.id'. – Val

+0

Я предполагаю, что это будет работать достаточно хорошо, но это пропустит край, где пользователь установлен, но пуст. – pmishev

ответ

2

Я нашел правильный синтаксис, он должен был быть:

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

Попробуйте использовать родительский пользователя, здесь OBJ

GET users/users/_search 
{ 
    "query": { 
    "bool": { 
     "must_not": [ 
     { 
      "exists": { 
      "field": "obj.user" 
      } 
     } 
     ] 
    } 
    } 
} 
+0

Пользователь не имеет родителя - это поле в документе, а не вложенном объекте – pmishev