So implementieren Sie Solr in Sitecore

8

Ich muss Solr Index in Sitecore implementieren und ich würde gerne wissen, was der beste Ansatz ist?

Ich habe folgende Ansätze betrachtet:

  1. Erfassen Sie das Publish-Ende-Ereignis (oder andere Ereignisse) und drücken Sie dann das Element auf solr index
  2. Implementieren Sie den benutzerdefinierten Datenbank-Crawler und alle Änderungen aus der Protokolltabelle. Dann benutze benutzerdefinierte Index Push-Daten zu solr.

Der zweite Ansatz klingt (meiner Meinung nach) wie ein Weg zu gehen. Muss ich in diesem Fall einen neuen Suchindex oder Suchmanager erstellen?

Wenn jemand es vorher getan hat, können Sie mir in die richtige Richtung zeigen? Auch, wenn Sie einige Links zu Artikeln über Sitecore-Solr-Implementierung veröffentlichen könnten.

UPDATE Ok, nach dem Lesen der Sitecore-Dokumentation habe ich folgendes herausgefunden:

  1. Erstellen Sie Ihre eigene SolrConfiguration-Klasse, in der Sie Eigenschaften wie solrservicerl, Indizes und ihre Definition (benutzerdefinierte solr-Indizes) festlegen können

  2. Erstellen Sie SolrIndex und fügen Sie es (in der Konfigurationsdatei) zu Ihrer SolrConfiguration hinzu. Welche Instanziierung, solrindex, sollte AddEntry-Ereignis von Sitecore History Manager abonnieren und mit solr-Crawlern kommunizieren.

  3. Erstellen Sie einen benutzerdefinierten Prozessor und hängen Sie ihn in die Sitecore-Initialisierungspipeline ein. Der Prozessor sollte SolrConfiguration initialisieren (aus Schritt 1) ​​

  4. Da alles in Ihrer Konfigurationsdatei mit refrection erstellt wird, können Sie die Instanz Ihrer Konfiguration basierend auf Ihrer Konfigurationsdatei

  5. erhalten

Wie hört sich das an? Kann ich bitte Kommentare haben?

    
Sebastian Siek 21.08.2012, 09:34
quelle

2 Antworten

2

Wir haben dies auf einigen Seiten gemacht und neigen dazu, einen neuen "publizierten" solr-Index und einen "unveröffentlichten" Index zu haben

Wir unterbrechen:

OnItemSaving

Ereignis, um Dinge in den unveröffentlichten Index zu schieben (Sie brauchen das vielleicht nicht, es kommt darauf an, ob Sie Dinge im Vorschaumodus wollen)

OnPublishItemProcessed

Wir verarbeiten Ergänzungen und Aktualisierungen zum veröffentlichten Index hier, ich bin mir nicht sicher, was wir hier mit Löschungen machen, ohne direkt in den Code zu graben, aber sicherlich mit Löschungen auf dem OnItemDelete (siehe unten)

OnItemDelete

Wir unterbrechen hier, um Dinge aus dem veröffentlichten und nicht veröffentlichten Index zu entfernen (ich denke, wir entfernen hier den veröffentlichten Index, weil Sitecore Sie den übergeordneten Knoten veröffentlichen lässt, um Löschungen in der Web-Datenbank zu veröffentlichen)

Ich hoffe, das hilft, ich würde den Code posten, wenn ich könnte (aber ich würde böse sein).

    
Steve Newstead 21.08.2012 11:55
quelle
2

Zusätzlich zu der bereits geposteten Antwort (was meiner Meinung nach eine gute Möglichkeit ist, Dinge zu tun) werde ich teilen, wie wir es machen.

Wir haben uns im Grunde nur den Sitecore-Datenbank-Crawler angeschaut und beschlossen, Dinge so zu machen, wie es gemacht wurde.

Wir verwenden eine erheblich modifizierte Version des Custom Item Generator , um die Zuordnung zwischen stark typisierten Objekten zu erleichtern und ein Objekt mit Eigenschaften, die unserem Solr-Schema entsprechen. Für die eigentliche Kommunikation mit Solr verwenden wir SolrNet .

Die allgemeine Idee ist, dass wir alle Elemente (beginnend mit dem Site-Root) rekursiv durchlaufen und sie basierend auf ihrer Vorlage auf den entsprechenden Typ abbilden. Dann gehen wir einen Indexierungsprozess für dieses Element durch (einige Elemente müssen mehrere Dokumente in unserer Implementierung an Solr indizieren).

Dieser Ansatz funktioniert sehr gut für uns, außer dass wir feststellen, dass wir, da wir alles auf einmal indexieren, eine leichte Verzögerung zwischen der Veröffentlichung und der Website einführen, die alle Änderungen am Index widerspiegelt. Ein Versehen, das wir am Anfang gemacht haben, aber bald in Ordnung bringen wird, ist, dass wir keinen "unveröffentlichten" Index haben (was bedeutet, dass wir die Seite veröffentlichen müssen, um Updates zu sehen). Es wirkt sich nicht so sehr auf unsere Lösung aus, aber ich kann definitiv sehen, wo es andere geben würde, also behalte das im Hinterkopf.

Wir wollten uns nicht besonders mit dem Löschen von Elementen aus dem Index befassen, also machen wir die Indizierung als ein Ereignis publish: end.

Ich hoffe, dass diese zusätzliche Erkenntnis Ihnen hilft. Soweit ich weiß, gibt es nicht viele Informationen über diese spezifische Kombination von Produkten, aber ich kann Ihnen sagen, dass es definitiv möglich und ziemlich nützlich ist.

    
Blair Scott 21.08.2012 18:56
quelle

Tags und Links