Я использую:
- Elasticsearch: 6.4.3
- Spring Boot: 2.1.9.RELEASE
- Spring Elasticsearch: 6.4.3
У меня есть индекс в ES:
{
"mapping": {
"logi_info_index": {
"properties": {
"area": {
"type": "text"
},
"createdBy": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"createdDate": {
"type": "long"
},
"logiCode": {
"type": "integer"
},
"esId": {
"type": "keyword" -> @Id for ES
},
"geoPoint": {
"type": "geo_point"
},
"isActive": {
"type": "text"
},
"latitude": {
"type": "text"
},
"longitude": {
"type": "text"
},
"storeAddress": {
"type": "text"
},
"storeName": {
"type": "text"
},
"updatedBy": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"updatedDate": {
"type": "long"
}
}
}
}
}
Теперь в этом индексе может быть около 50 тыс. Документов.
Для некоторых бизнес-логи c, я необходимо обновить все документы, которые удовлетворяют указанному c условию: isActive=0
.
Пример:
У нас есть документы с isActive as 0 or 1
.
- Удалить все документы с
isActive = 1
[=> Это возможно с DeleteQuery
(deleteAll) <=] </li> - Поскольку теперь у нас есть только
isActive = 0
, мы хотим обновить оставшиеся документы isActive = 1
.
У меня следующих вопросов :
- Как мне обновить все документы со значением для поля спецификаций c, БЕЗ использования Id (как я делал при удалении) ?
- Это вообще возможно ?
- Если это возможно, я хочу использовать возможности Spring, чтобы это произошло.