2014-08-31 7 views
5

Czy istnieje metoda elastycznego przeszukiwania w pełni (częściowo) aktualizowania dokumentów i nie tworzenia nowych w przypadku, gdy jeszcze nie istnieje?Pełna aktualizacja dokumentów bez tworzenia, jeśli nie istnieje

Do tej pory odkryłem, że metoda _update, przekazując atrybut wewnątrz ciała żądania json do częściowej aktualizacji dokumentów, jednak chciałbym zastąpić cały dokument w tym przypadku, nie tylko częściowo.

Zauważyłem również, że metoda index, gdzie wysyłanie żądania PUT działa dobrze, chociaż tworzenie nowego dokumentu w przypadku, gdy id jeszcze nie indeksowane.

Ustawienie parametru op_type na create spowoduje wymuszenie utworzenia dokumentu zamiast aktualizacji. Zastanawiam się, czy jest jakiś sposób, aby zawsze wymusić na update i nigdy create nowy?

A może jest jeszcze inna metoda, która pozwoli mi osiągnąć takie zadanie?

Odpowiedz

0

Jeśli dobrze rozumiem, chcesz zindeksować dokument, ale tylko jeśli już istnieje? Podobnie jak opcja op_type z update?

Możesz to zrobić głównie za pomocą interfejsu API aktualizacji, ponieważ Twoje mapowanie pozostaje spójne. Jeśli dokument nie istnieje, z numerem _update otrzymasz numer 404. Jeśli istnieje, ES połączy zawartość doc z jakimkolwiek dokumentem tam istniejącym. Jeśli upewnisz się, że wysyłasz nowy dokument z wszystkimi polami w mapowaniu, to faktycznie go zastąpisz.

Pamiętaj jednak, że możesz to zrobić bez scalania dokumentów w dwóch żądaniach; pierwszy sprawdzający istnienie dokumentu z żądaniem HEAD. Jeśli HEAD /idx/type/id zakończy się powodzeniem, wykonaj polecenie PUT. Zasadniczo to dzieje się wewnętrznie za pomocą interfejsu API aktualizacji, z niewielkim dodatkowym obciążeniem. Ale HEAD jest naprawdę tani, ponieważ nie tasuje żadnych ładunków. Po prostu zwraca HTTP 200/404.

+0

Brzmi dobrze Drew, HEAD, jak powiedziałeś, jest naprawdę skuteczny w tych kategoriach. Dzięki za pomoc. – zanona

Powiązane problemy