Ich muss Solr Index in Sitecore implementieren und ich würde gerne wissen, was der beste Ansatz ist?
Ich habe folgende Ansätze betrachtet:
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:
Erstellen Sie Ihre eigene SolrConfiguration-Klasse, in der Sie Eigenschaften wie solrservicerl, Indizes und ihre Definition (benutzerdefinierte solr-Indizes) festlegen können
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.
Erstellen Sie einen benutzerdefinierten Prozessor und hängen Sie ihn in die Sitecore-Initialisierungspipeline ein. Der Prozessor sollte SolrConfiguration initialisieren (aus Schritt 1)
Da alles in Ihrer Konfigurationsdatei mit refrection erstellt wird, können Sie die Instanz Ihrer Konfiguration basierend auf Ihrer Konfigurationsdatei
Wie hört sich das an? Kann ich bitte Kommentare haben?
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).
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.