Возможно ли обновить некоторые значения определенных полей в elasticsearch без перезаписи других полей.?
Обновить только значение поля в elasticsearch
Ответ 1
В качестве кодового вклада в этот ответ может быть использован следующий запрос:
POST /index/type/100100471/_update
{
"doc" : {
"yourProperty" : 10000
}
}
Этот запрос обновляет свойство yourProperty
только.
В результате появляется такой ответ:
{
"_index": "index",
"_type": "type",
"_id": "100100471",
"_version": 1,
"_shards": {
"total": 0,
"successful": 1,
"failed": 0
}
}
Ответ 2
Да, Elasticsearch поддерживает частичные обновления. Это означает, что вы можете отправить:
- частичный документ, который будет объединен с существующим
- скрипт, который будет выполнен поверх существующего документа
Посмотрите на обновление API. В обоих случаях из-за того, как работает базовая библиотека lucene, происходит то, что обновляемый документ извлекается, к нему применяются изменения, и старый документ перезаписывается новым. В конце концов, это фактически полная перезапись документа, но вам не нужно отправлять весь документ, если вы не отключили поле _source, включенное по умолчанию, то есть поле, которое позволяет получить весь документ, чтобы применить к нему изменения.
Ответ 3
Если вы хотите обновить только существующее значение поля, попробуйте следующее решение:
POST IndexName/_update_by_query
{
"script": {
"source": """
if (ctx._source?.Field != null)
{
ctx._source.remove('Field');
ctx._source.put('Field', 'Value');
}
""",
"lang": "painless"
},
"query": {
"terms": {
"_id": [
1 (Replace with Document ID)
]
}
}
}
Если вы хотите добавить новое поле со значением, попробуйте следующее решение:
POST IndexName/_update_by_query
{
"script": {
"source": """
if (ctx._source?.NewField == null)
{
ctx._source.hf.put('NewField', 'Value');
}
""",
"lang": "painless"
},
"query": {
"terms": {
"_id": [
1 (Replace with Document ID)
]
}
}
}
Ответ 4
У меня та же проблема, кто-нибудь знает?
Ответ 5
В ES 7.3 новый формат:
POST /myindex/_update/mydocid
{
"doc" : {
"myfield": "new value of my field"
}
}
Ответ 6
вы можете сделать следующее:
- получить документ
- обновите свое поле
- напишите документ назад
это то же самое для Solr
если вы просто пишете новый документ (с существующим идентификатором) и заполняете только одно поле, которое хотите обновить, весь документ (все остальные поля) будет перезаписан