Żądanie aktualizacji pobiera źródło z elasticsearch, modyfikuje je i przywraca do elastycznego wyszukiwania. Jeśli masz już kopię dokumentu przy użyciu aktualizacji, nie ma sensu. Generalnie szybciej byłoby po prostu zaindeksować nową wersję. Jeśli jednak dokument nie jest łatwo dostępny, ale wiesz, jakie zmiany chciałbyś wprowadzić do dokumentu, bardziej skuteczne może być użycie aktualizacji. Na przykład, jeśli nie mam kopię dokumentu samochodu, ale chcę, aby dodać nowy twórca mogę zrobić coś takiego:
curl -XDELETE localhost:9200/test
curl -XPUT localhost:9200/test -d '{
"settings": {
"index.number_of_shards": 1,
"index.number_of_replicas": 0
},
"mappings": {
"car": {
"properties": {
"creators" : {
"type": "nested",
"properties": {
"name": {"type":"string"}
}
}
}
}
}
}
'
curl -XPOST localhost:9200/test/car/1 -d '{
"creators": [{
"name": "Steve"
}]
}
'
echo
curl -XPOST localhost:9200/test/car/1/_update -d '{
"script" : "ctx._source.creators += new_creator",
"params" : {
"new_creator" : {"name": "John"}
}
}'
echo
curl "localhost:9200/test/car/1?pretty=true"
echo
W skrypcie aktualizacji ctx
jest specjalną zmienną, która pozwala aby uzyskać dostęp do źródła obiektu, który chcesz zaktualizować. ctx._source
jest zapisywalną wersją źródła. Możesz modyfikować ten dokument w skrypcie, a zmodyfikowane źródło będzie zachowane jako nowa wersja dokumentu.
Dziękuję za kolejną wspaniałą odpowiedź :) Abyś zrobił metodę aktualizacji w aplikacji Java najpierw usuwając dokument, a następnie ponownie go indeksuj. – LuckyLuke
Nie trzeba najpierw usuwać dokumentu. Możesz po prostu go zaindeksować. Jeśli dokument o tym samym identyfikatorze już istnieje, zostanie automatycznie usunięty i zastąpiony nową wersją. – imotov
Niesamowite, dziękuję. – LuckyLuke