2012-08-21 11 views
8

Muszę zaimplementować indeks Solr w Sitecore i chciałbym wiedzieć, jakie jest najlepsze podejście?Jak wdrożyć Solr w Sitecore

Spojrzałem na następujących metod:

  1. Przechwytywanie publikuje zdarzenie końcowy (lub inne zdarzenia), a następnie naciśnij pozycję do SOLR indeks
  2. wdrożyć niestandardowe robota bazy danych i uzyskać wszystkie zmiany z historii tabeli. Następnie za pomocą niestandardowych danych wypychania indeksu do solr.

Drugie podejście brzmi jak droga (moim zdaniem). W takim przypadku czy muszę utworzyć nowy indeks wyszukiwania lub menedżera wyszukiwania?

Jeśli ktoś już to zrobił, czy możesz wskazać mi właściwy kierunek? Także jeśli mógłbyś zamieścić kilka linków do artykułów o implementacji sitecore-solr.

UPDATE Ok, po przeczytaniu dokumentacji Sitecore to co wymyśliłem:

  1. Tworzenie niestandardowej klasy SolrConfiguration którym można ustawić właściwości jak solrserviceurl, dodawanie indeksów i jego definicji (na zamówienie Solr indeksy)

  2. Utwórz SolrIndex i dodaj go (w pliku konfiguracyjnym) do konfiguracji SolrConfiguration. Które tworzenie instancji, solrindex powinno subskrybować zdarzenie AddEntry programu Sitecore History Manager i komunikować się z robotami Solr.

  3. Utwórz niestandardowy procesor i podłącz do potoku inicjalizacji sitecore. Procesor powinien zainicjować SolrConfiguration (od kroku 1)

  4. Ponieważ wszystko w pliku config w będą budować za pomocą refrection, można uzyskać instancję swojej cofiguration na podstawie pliku konfiguracyjnego

Jak to brzmi lubić. Czy mogę prosić o komentarze?

Odpowiedz

2

Robiliśmy to w kilku miejscach i mają tendencję do nowego "opublikował" oraz "indeks SOLR niepublikowane" indeks

Przerywamy:

OnItemSaving

zdarzeń do pchania rzeczy do niepublikowanego indeksu (możesz tego nie potrzebować, to zależy, czy chcesz coś w trybie podglądu)

OnPublishItemProcessed

Przetwarzamy dodatki i aktualizacje do opublikowanego indeksu tutaj, nie jestem pewien, co robimy tu o delecji bez kopania prawo do kodu, ale na pewno sobie z usuwaniem na OnItemDelete (wymienionych poniżej)

OnItemDelete

Przerywamy tutaj, aby usunąć rzeczy z publikowane i nie opublikowanego indeksu (myślę, że możemy usunąć z opublikowanego indeksu tutaj, ponieważ Sitecore sprawia, że ​​publikowanie w celu opublikowania na delecji do internetowej bazy danych węzeł nadrzędny)

Mam nadzieję, że to pomoże, umieściłbym kod, gdybym mógł (ale byłbym nachmurzony).

+0

Witam, podoba mi się to podejście. Zalecenie mówi, że zdarzenia powinny być używane do prostych, szybkich operacji związanych z przedmiotami (popraw mnie, jeśli się mylę). Wiem, że działa dobrze, jeśli subskrybujesz wydarzenia i aktualizujesz swój indeks solr, ale czy ma to jakieś problemy z wydajnością? –

+0

Nie zgłoszono żadnych problemów z wydajnością i wdrożono kilka dużych stron internetowych, na których działaliśmy (które mają dużo treści). –

+0

Nie patrzyłem na to jeszcze w szczegółach, ale ten https://github.com/jerrong/Sitecore-Item-Buckets wygląda bardzo, bardzo interesująco i może warto byś go zbadał. (Ahhh wygląda na to, że to tylko Sitecore 6.5, ale to może być dobre dla ciebie?) –

2

Oprócz już opublikowanej odpowiedzi (co uważam za dobry sposób na robienie rzeczy) podzielę się tym, jak to robimy.

Po prostu przyjrzeliśmy się robotowi bazy danych Sitecore i postanowiliśmy zrobić coś w rodzaju tego, jak to robili.

Używamy znacznie zmodyfikowanej wersji Custom Item Generator w celu ułatwienia mapowania między silnie wpisanymi obiektami i obiektem, który ma właściwości, które odpowiadają naszemu schematowi Solr. Dla rzeczywistej komunikacji z Solr używamy SolrNet.

Ogólna koncepcja polega na rekursywnym przechwytywaniu wszystkich elementów (począwszy od katalogu głównego witryny) i odwzorowaniu ich na odpowiedni typ w oparciu o jego szablon. Następnie przechodzimy przez proces indeksowania tego elementu (niektóre elementy muszą indeksować wiele dokumentów do Solr w naszej implementacji).

Podejście to działa bardzo dobrze, z tym wyjątkiem, że zauważę, że ponieważ indeksujemy wszystko od razu, ma tendencję do wprowadzania niewielkiego opóźnienia między publikowaniem a witryną odzwierciedlającą wszelkie zmiany wprowadzone do indeksu. Jednym z niedopatrzeń, które podjęliśmy na początku, ale wkrótce nadrobimy poprawki, jest to, że nie mamy "niepublikowanego" indeksu (co oznacza, że ​​musimy opublikować witrynę, aby zobaczyć aktualizacje). Nie ma to większego wpływu na nasze rozwiązanie, ale zdecydowanie mogę zobaczyć, gdzie inni, więc miej to na uwadze.

Nie chcieliśmy szczególnie usuwać elementów z indeksu, więc indeksujemy jako wydarzenie: end.

Mam nadzieję, że ten dodatkowy wgląd pomoże. O ile wiem, nie ma zbyt wielu informacji na temat tej konkretnej kombinacji produktów, ale mogę powiedzieć, że jest to zdecydowanie możliwe i całkiem użyteczne.

+0

To też działa (testowane to podejście), ale nie brzmi dobrze - przeszukiwacz baz danych musi zostać dodany do indeksu (który jest lucenowy index), co oznacza, że ​​będziesz aktualizował 2 indeksy ... lub po aktualizacji indeksu solr anulujesz zlecenie, a zatem rekord nie zostanie dodany do indeksu sitecore lucene? –

+0

Implementacja Solr działa niezależnie od indeksu Sitecore Lucene. Aby to wyjaśnić, jako inspirację wykorzystaliśmy przeszukiwacz baz danych (w szczególności podejście do zbierania elementów do indeksowania). W żaden sposób nie aktywnie używamy indeksu Sitecore Lucene. Jak już wspomniałem, mamy tylko jeden indeks (dodamy drugi w przyszłości) i poprzez konfigurację informujemy o indeksowaniu internetowej bazy danych. –

+0

Czy zauważyłeś jakiś problem z wydajnością? Również w jaki sposób radziłeś sobie z odbudowywaniem indeksu? –