2010-01-26 4 views
28

Wir haben mehrere Kern-Setup in SOLR und möchten über diese Kerne suchen und eine einzige Ergebnismenge zurückgeben.Suchen Sie mehrere SOLR-Kerns und geben Sie einen Ergebnissatz zurück

Ein bisschen mehr Hintergrund: Wir haben einen SOLR-Kern, den wir unsere interne Blog-Engine indexieren. Wir haben auch einen SOLR-Kern, den wir in unser CMS-System aufnehmen. Wir würden gerne über diese beiden Kerne suchen, aber eine einzelne Ergebnismenge sehen.

Ich bin mir bewusst, dass Entitäten in einem Dokument verwandt sind, aber wir möchten die Kerne getrennt halten, um Wartung und Redundanz zu vereinfachen.

Wir verwenden SolrSharp als Wrapper für die Suche nach SOLR. Jeder Rat oder Richtung würde geschätzt werden.

+0

welche Client-Plattform verwenden Sie? –

+0

Wir verwenden SolrSharp als Wrapper für SOLR. –

Antwort

21

Seit Solr 1.3 gibt es in Solr ordentliche Multi-Core-Suchfunktionen. Lesen Sie den Artikel Distributed Search, in dem erläutert wird, wie der shards-Parameter verwendet wird, um mehrere Cores abzufragen und Ergebnisse als einen Datensatz zurückzugeben.

+3

Funktioniert DistributedSearch über mehrere verschiedene Kerne hinweg? Ich habe es nicht selbst ausprobiert, aber ich frage mich, ob es unglücklich wäre, wenn Core A die Felder "name" und "title" hat und Core B die Felder "name" und "summary" hat und daher nicht übereinstimmen? Oder würdest du Name, Zusammenfassung und Titel zurückbekommen? –

+7

Eric - Meine Strategie besteht darin, einen separaten Kern mit einem zusammengeführten Schema zu verwenden, bei dem ein Anforderungshandler zum Durchsuchen mehrerer Shards implementiert ist. Auf diese Weise muss sich der Client nicht darum sorgen, den Parameter "shards" anzugeben. – Brian

+4

Also, wenn ich Core0 mit Feldern documentId, fieldA, fieldB und Core1 mit Feldern documentId, fieldC, fieldD habe. Dann erstelle ich einen weiteren Kern, sagen wir Core3 mit Feldern documentId, fieldA, fieldB, fieldC, fieldD.Ich werde nie Daten in diesen Kern importieren? Erstellen Sie dann einen Abfrage-Handler, der den Shard-Parameter enthält. Also, wenn ich Core3 abfrage, wird es nie wirklich indexierte Daten enthalten, aber wegen der Shard-Suche wird es die Ergebnisse von den anderen zu den Kernen holen und es auf dem dritten Kern "präsentieren"? Danke für die Hilfe! –

19

Es gibt keine Möglichkeit, eine einzelne Abfrage über mehrere Kerne hinweg auszuführen. Die Distributed Search, die in einer anderen Antwort erwähnt wird, ist mit Shards zu tun, die Indizes über Systeme aufteilen.

In der Tat sind mehrere Kerne wirklich zum Speichern von separaten und unterschiedlichen Strukturen in jedem und Abfrage mehrerer Kerne sollte keinen Sinn machen. Wie einige in früheren Kommentaren erwähnt haben, können Sie einen zusätzlichen Kern haben, der alle Ihre Felder enthält - obwohl Sie die Felder in diesem neuen Kern möglicherweise umbenennen müssen, damit ähnliche benannte aber unterschiedlich typisierte Felder beide gespeichert werden können.

3

Mathews Antwort ist genau richtig. Scherben und Multi-Kerne sind Äpfel und Orangen. Sie können keine einheitliche einzelne Abfrage über mehrere Kerne haben. Sie müssen einzelne Abfragen pro Kern ausführen (http: // localhost: 8983/solr/core0/select? Q = :, http: // localhost: 8983/solr/core1/wählen? Q = :). Bei Shards jedoch (http: // localhost: 8983/solr/select? Shards = localhost: 8983/solr, localhost: 8984/solr & q = :).

1

Verteilte Suche ist die richtige Antwort. Ich schlage vor, die verteilte Suche direkt im Handler zu konfigurieren. Sie können localhost im Handler konfigurieren, obwohl Sie solr extern aufrufen können. Jetzt können Sie den Such Handler aufrufen, die automatisch in allen konfigurierten Kerne suchen:

http://solrhost:8983/solr/core1?q=:

<requestHandler name="/multicore" class="solr.SearchHandler"> 
    ... 
    <lst name="invariants"> 
    <str name="shards">localhost:8983/solr/core1,localhost:8983/solr/core2</str> 
    </lst> 
</requestHandler> 
+0

Wenn core1 und core2 nicht-vollständige-gleiche Schemas haben Das Ergebnis ist nicht vorhersagbar, schließlich ist es für schemabasierte Solr nicht rechen- haft. In einem Wort gibt es für Solr keine Zuckerantwort für diese schwierige Frage. Selbst für Elasticsearch müssen Sie immer noch Codes schreiben, um zu prüfen, welche Art von Datenquelle es gibt Geben Sie ein Dokument ein und extrahieren Sie das entsprechende Feld s (Schlüssel = Feldname) aus einem bestimmten Dokument. –

Verwandte Themen