/ / Czy podczas wstawiania dokumentu można uzyskać odpowiedź od perkolatora? - wyszukiwanie elastyczne

Czy podczas wstawiania dokumentu można uzyskać odpowiedź od perkolatora? - elastyczne wyszukiwanie

Podczas szukania rozwiązania, które pozwala miwyzwalaj niektóre akcje za każdym razem, gdy wstawiane są dane Znalazłem API perkolatora z elasticsearch. Przeczytałem sporo stron, dopóki nie zauważyłem, że wszystkie zapytania korzystające z API perkolatora używają GET.

Czy tak jest w przypadku użycia wstawianiadokumenty i chcąc wiedzieć, które pasują do zapytania, musiałbym zrobić dwa zapytania? Ze stron mam wrażenie, że najpierw musiałbym wstawić dokument, a następnie zapytać indeks perkolatora z tym samym dokumentem, czy pasuje. Czy może istnieje parametr zapytania lub podobny parametr pozwalający elasticsearch uwzględnić odpowiedź perkolatora w odpowiedzi otrzymanej z wkładki?

Odpowiedzi:

7 dla odpowiedzi № 1

Biorąc pod uwagę twoje pytanie, myślę, że patrzyszelasticsearch 1.0, w tej chwili dostępny w Beta2. Ten szczegół jest ważny, ponieważ perkolator został przepisany w wersji 1.0 i wygląda zupełnie inaczej w porównaniu z wersją dostępną w wersji 0.90.

Zwykle używasz perkolatora do rejestrowania zapytań, które są zapisywane. Następnie możesz przeskanować dokument, aby dowiedzieć się, ile zapytań pasuje, bez faktycznego indeksowania.

To, czego wiele osób potrzebuje, to dodatkowy krokindeksowanie dokumentu, więc miło jest móc zarówno przesyłać, jak i indeksować w tym samym żądaniu, dzięki czemu można zarówno zindeksować dokument, jak i odzyskać pasujące zapytania. Było to możliwe w wersji 0.90 przy użyciu tak zwane przeskalowanie podczas indeksowania. Jest to jedyna funkcja, która została usunięta po przepisaniu do wersji 1.0, aby móc lepiej dystrybuować zarejestrowane zapytania i skalować je.

W rzeczywistości przy 0.90 zapytania są przechowywane w indeksie zastrzeżonym, zwanym _percolator, który zawsze ma 1 odłamek i auto_expand_replica Ustawić true. Oznacza to, że każdy węzeł będzie zawierał wszystkiezapytania, ponieważ ten pojedynczy fragment będzie automatycznie replikowany do wszystkich węzłów. Głównym powodem tego jest to, że jeśli chcesz zaindeksować dokument i jednocześnie przesączyć, aby zrobić to w sposób doskonały, musisz upewnić się, że dwa odłamki, które musisz trafić (zapytania i dane) są w tym samym węźle. Jeśli wszystkie zapytania znajdują się na wszystkich węzłach, jest to gwarantowane, dlatego przesiąknij, podczas gdy indeksowanie jest możliwe i będzie wystarczająco szybkie. Istnieje jednak duże ograniczenie, dlatego perkolator został przepisany: istnieje ograniczenie liczby zapytań, które można zarejestrować, ponieważ będą one przetwarzane w jednym fragmencie.

W wersji 1.0 można rejestrować zapytania dla dowolnego indeksu i będą one rejestrowane pod zastrzeżonym typem o nazwie .percolator. Następnie możesz skalować również za pomocą zapytań, jakmają normalny indeks i możesz zdefiniować liczbę odłamków. Wadą jest to, że nie masz całej kopii zapytań w każdym węźle, dlatego przeskalowanie, podczas gdy indeksowanie nie jest możliwe. Możesz jednak zrobić to, co jest równoważne, ale składa się z dwóch żądań:

  1. indeksuj dokument
  2. przesączyć istniejący dokument id, bez potrzeby ponownego wysyłania całego dokumentu

Krok 2 można wykonać zaraz po powrocie operacji indeksu, ponieważ wykonuje on wewnętrznie get przez id, który działa w czasie rzeczywistym, więc nie trzeba czekać ani odświeżać indeksu.


0 dla odpowiedzi nr 2

Wierzę, że to nie byłoby możliwe.

Od dokumentacja..

_Perkolator, który przechowuje repozytorium zarejestrowanych zapytań, jest po prostu kolejnym indeksem w ES.

Od percolator jest kolejnym indeksem, należałoby trafić w ES innym zapytaniem skierowanym do _percolator jako indeks.