Лучший способ проверить, существует ли поле в документе Elasticsearch
Может быть, это очень глупый вопрос. Каков наилучший способ проверить, существует ли поле документа в elasticsearch? Я не могу найти что-либо в документации.
Например, если этот документ не имеет поля/ключа "цена", я не хочу возвращать результат.
{ "обновлено": "2015/09/17 11:27:27", "name": "Eye Shadow", "формат": "1,5 г /0,05 унции", }
Что я могу сделать?
Спасибо
Ответы
Ответ 1
Вы можете использовать exists
фильтр в сочетании с bool/must
фильтром следующим образом:
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"exists": {
"field": "price"
}
},
... <-- your other constraints, if any
]
}
}
}
}
}
Вы также можете использовать фильтр missing
в сочетании с фильтром bool/must_not
:
{
"query": {
"filtered": {
"filter": {
"bool": {
"must_not": [
{
"missing": {
"field": "price"
}
}
]
}
}
}
}
}
Ответ 2
Вы можете использовать существующий фильтр:
{
"query": {
"filtered": {
"filter": {
"exists": {
"field": "status"
}
},
"query": {
"match_all": {}
}
}
}
}
С уважением,
Ален
Ответ 3
Фильтр exists
был заменен на exists
запрос из ES 2.1, хотя его работа одинаков. Кроме того, отсутствующий фильтр удаляется, а отсутствующий запрос устарел.
Чтобы получить все документы, которые имеют определенное поле,
"bool": {
"must": {
"exists": {
"field": "my_field"
}
}
}
и чтобы получить все документы, которые НЕ имеют определенное поле, используйте его с must_not
, как этот
"bool": {
"must_not": {
"exists": {
"field": "my_field"
}
}
}
Эластичные документы: https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-missing-query.html
Ответ 4
Вы можете напрямую выполнять
{
"query": {
"exists": {
"field": "fieldName"
}
}
}
Если вы тоже хотите добавить совпадение, вы можете пойти
{
"query": {
"bool": {
"must": [{
"match": {
"fieldName": "value"
}
},
{
"exists": {
"field": "fieldName"
}
}]
}
}
}
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-query.html