Elasticsearchの特定のフィールドの値を、他のフィールドを上書きせずに更新することは可能ですか? ?
この回答に対するコードベースの貢献として、次のクエリを使用できます。
POST /index/type/100100471/_update
{
"doc" : {
"yourProperty" : 10000
}
}
このクエリはyourProperty
プロパティのみを更新します。
その結果、次の応答が表示されます。
{
"_index": "index",
"_type": "type",
"_id": "100100471",
"_version": 1,
"_shards": {
"total": 0,
"successful": 1,
"failed": 0
}
}
はい、Elasticsearchは部分的な更新をサポートしています。それはあなたが提出できることを意味します:
pdate api をご覧ください。どちらの場合も、基盤となるluceneライブラリの動作により内部で発生することは、更新されるドキュメントが取得され、変更が適用され、古いドキュメントが新しいドキュメントで上書きされることです。結局のところ、それは実際にはドキュメントの完全な書き直しですが、デフォルトで有効になっている _ source field を無効にしない限り、ドキュメント全体を送信する必要はありません。変更を適用するためにドキュメント全体を取得できるフィールド。
既存のフィールド値のみを更新する場合は、次の解決策を試す必要があります。
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)
]
}
}
}
ES 7.3の新しい形式は次のとおりです。
POST /myindex/_update/mydocid
{
"doc" : {
"myfield": "new value of my field"
}
}