2013-01-08 14 views
9

Koszt dodawania indeksów jest dobrze udokumentowany, ale nie byłem w stanie znaleźć dobrych informacji o tym, kiedy używać wielu indeksów w odniesieniu do różnych typów indeksowanych dokumentów.W ElasticSearch, czy powinienem używać wielu indeksów dla osobnych, ale powiązanych podmiotów?

Oto ogólny przykład do zilustrowania pytanie:

że mamy następujące podmioty

  • Produkty (nazwa, ProductId, ProductCategoryID, list-of-sklepy)
  • Kategorie produktów (Nazwa, ProductCategoryID)
  • Sklepy (nazwa, StoreID)

Czy należy zrzucać te trzy różne typy dokumentów do jednego indeksu, każdy z odpowiednim elasticsearch type?

Mam trudności z ustaleniem, gdzie należy narysować linię na jednym i wielu indeksach.

Co, jeśli dodamy niepowiązany podmiot, "Strony internetowe". Zdecydowanie oddzielny indeks?

+2

Dobre pytanie. Rzuć okiem na rozmowę [Data Design Patterns] (http://vimeo.com/44716955) wygłoszoną przez autora elasticsearch w Berlin Buzzwords. Ostatecznie zależy to od tego, co masz zamiar zrobić z danymi: ile masz danych? Czy zawsze chcesz przeszukać wszystkie swoje dane? Jak szukać? – javanna

+0

Dzięki za link. Będę to oglądać! W moim konkretnym przykładzie będę miał około 100 000 dokumentów trzech lub czterech typów. Teraz możesz podnieść dobry punkt, być może podzbiór dokumentów musi być przeszukiwany w 80% przypadków, podczas gdy w 20% przypadków należy przeszukać wszystkie dokumenty. Zauważam, że elasticsearch ma możliwość przeszukiwania wielu indeksów w razie potrzeby. (źródło: http://www.elasticsearch.org/guide/reference/api/search/indices-types.html) –

Odpowiedz

6

Ostatnio modelowałem system zaplecza ElasticSearch od podstaw i z mojego punktu widzenia najlepszą opcją jest umieszczenie wszystkich powiązanych dokumentów w tym samym indeksie.

Przeczytałem, że some people had problems with too many concurrent indexes (1 indeks na typ). Lepiej dla wydajności i solidności, aby ujednolicić powiązane typy w tym samym indeksie.

Poza tym, jeśli typy są w tym samym indeksie można użyć „_parent” pole do tworzenia modeli hierarquical które pozwolą wam ciekawe funkcje wyszukiwania jako „has_child” za i „has_parent” i oczywiście nie trzeba powielać dane w twoim modelu.

7

Bardzo interesujący film wyjaśniający elasticsearch „Wzorce projektowe danych” Shay Banon:

http://vimeo.com/44716955

To dokładna odpowiedź na pytanie o 13:40 gdzie bada różne przepływy danych, patrząc na koncepcji z Type, Filter i Routing

Pozdrowienia

Powiązane problemy