2013-04-11 8 views
8

Jestem nowy w ElasticSearch, więc jest to prawdopodobnie coś zupełnie banalnego, ale nie wymyśliłem niczego lepszego, co ściąganie wszystkiego, przetwarzanie za pomocą skryptu i aktualizowanie rejestrów jeden po drugim .Aktualizowanie pola we wszystkich rekordach w elastycznym wyglądzie

Chcę zrobić coś takiego prostego aktualizacji SQL:

UPDATE RECORD SET SOMEFIELD = SOMEXPRESSION 

Moim zamiarem jest, aby zastąpić aktualne dane fikcyjne z pewnym danych sprawia, że ​​więcej sensu (tak ekspresja jest w zasadzie losowo wybiera z puli prawidłowe wartości).

Odpowiedz

14

Istnieje kilka z openissues o umożliwieniu aktualizacji dokumentów przez zapytanie.

Wyzwaniem technicznym jest to, że lucene (biblioteka wyszukiwarek, którą elasticsearch używa pod maską), segmenty są tylko do odczytu. Nigdy nie można zmodyfikować istniejącego dokumentu. Musisz usunąć starą wersję dokumentu (który przy okazji zostanie oznaczony jako usunięty do momentu scalenia fragmentu) i zindeksować nowy. Tak właśnie działa istniejący update api. Dlatego aktualizacja według zapytania może zająć dużo czasu i prowadzić do problemów, dlatego nie została jeszcze wydana. Mechanizm, który pozwala przerwać uruchamianie zapytań, byłby przyjemny w tym przypadku.

Ale jest update by query plugin, który eksponuje dokładnie tę funkcję. Po prostu uważaj na potencjalne ryzyko przed jego użyciem.

+1

Po pewnych badaniach, do których doszedłem, wyciągnąłem ... Czasami nie mogę zrozumieć całego szumu wokół NoSQL :( – fortran

+0

Tu chodzi bardziej o lucene niż NoSQL Lucene nie aktualizuje, tylko reindeksuje ... w ten sposób lepiej ponownie zindeksuj siebie :) Czy mogę prosić o odpowiedź, jeśli była przydatna? – javanna