2012-03-04 10 views
12

Duże aplikacje internetowe oferują "globalne" wyszukiwanie, które łączy dane z różnych pełnotekstowych indeksów (to jest tabela w SQL), aby zapewnić połączony wynik wyszukiwania uporządkowany według jego wyniku. Więc powiedzmy, że masz filmy, artykuły blogu i użytkowników, a następnie po wpisaniu w „domu” w poszukiwaniu mogłaby przynieść wyniki tak (zamówione przez wynik):Wyszukiwanie wielu indeksów w ElasticSearch (Tire)

  • My Home (artykuł napisany)
  • Home Town (User)
  • chcę iść do domu (wideo)

Czy ktoś wie jak wykonać taką połączoną wyszukiwanie za pomocą ElasticSearch? Najlepiej używać klejnotów do opon dla Railsów, ale będą również działać surowe dane ElasticSearch JSON.

Dzięki.

Odpowiedz

16

dotyczące Tyru, istnieje istotna różnica: używasz go samodzielnie lub w integracji/ActiveModel ActiveRecord.

W pierwszym przypadku wystarczy przeszukać wiele wskaźników, Tire.search ['indexA', 'indexB'] do ... end. Lub wyszukaj cały klaster, Tire.search do ... end (odpowiednik curl 'http://localhost:9200/_search?q=*').

W tym ostatnim przypadku, Opona nie obsługuje obecnie wielu wyszukiwarek, w tej chwili. Zwróć uwagę na to żądanie ściągania: https://github.com/karmi/tire/pull/218 - zbuduj klejnot z nałożoną łatą i pomóż przetestować rozwiązanie.

UPDATE

Aktualny opon (> 0,4) można ładować wiele wystąpień modelu dobrze. Zobacz na przykład: integration test.

+1

Odpowiedź bezpośrednio od właściciela klejnotu :) Wielkie dzięki! I tak używam go z ActiveRecord. W najgorszym przypadku ustawię tylko: load => false, aby nie odradzał się żaden obiekt ActiveRecord. – matsko

+0

Tak, bez ': load', odzyskasz" elastyczne "modele, instancje' Tyre :: Results :: Item'. Jednak wyszukiwanie wielu modeli jest czymś, co powinniśmy obsługiwać i podoba mi się łatka w numerze # 218. – karmi

1

Jestem prawie pewien, że punkt końcowy http://127.0.0.1:9200/_search zrobi za Ciebie. Ponad 99% moich danych znajduje się w jednym indeksie, więc trudno mi to zweryfikować tutaj.

Ponadto, sprawdź punkt końcowy multi-wyszukiwarki: http://www.elasticsearch.org/guide/reference/api/multi-search.html

+0

Jakie są zalety/wady wynikające z umieszczenia większości danych w jednym indeksie ES? Wyszukiwanie jest zdecydowanie łatwiejsze, mniej skomplikowane, ale jakieś wady? – raffian

+0

Czasami nie jest możliwe posiadanie tylko jednego pojedynczego indeksu. Czasem po prostu błędnie obliczasz # shards, a tworzenie nowego indeksu jest szybsze niż ponowne indeksowanie wszystkiego ponownie do innego indeksu. –

Powiązane problemy