Blog_allgemein

Tipp – Suchen in der Cloud / Neuer Artikel der Blogserie “SolrCloud – Tipps, Tricks und Pitfalls”

Johannes Brucher

Johannes Brucher

Das Suchen in der SolrCloud unterscheidet sich prinzipiell nicht vom Suchen in einer herkömmlichen Solr Instanz. Die eigentlichen Requests sind nahezu identisch; der Core-Name, der Name des RequestHandler sowie Parameter sind weiterhin Bestandteil des Request. Es gibt im Umgang mit der SolrCloud ein paar spezielle Parameter, die die Suche in der Cloud stark beeinflussen können. Auf diese Parameter möchte ich in diesem Artikel näher eingehen.

Standard Request

Die bekannte Struktur der Requests (siehe folgendes Beispiel) startet eine Suche in der SolrCloud:

https://localhost:8983/solr/core1/select?q=*:*

In der Cloud werden die Such-Requests ebenfalls verteilt, d.h., es wird nicht zwingend der gefragte Server (localhost:8983) die Suche durchführen, sondern ein beliebiger Solr Server innerhalb der SolrCloud. Dies dient dazu, die Last zu verteilen und somit schnellere Suchen zu ermöglichen.

shards – Parameter

Es ist möglich den Such-Request auf ein Subset der Shards (siehe Parameter shards) einer Collection zu beschränken. Hierzu kann der bereits bekannte shards-Parameter genutzt werden. Im nachfolgenden Beispiel werden nur explizit die Shards mit den IDs shard2shard4 und shard6 durchsucht.

https://localhost:8983/solr/core1/select?q=*:*&shards=shard2,shard4,shard6

Im Parameter kann auch die genaue Adresse von Shard(s) übergeben werden, siehe folgendes Beispiel:

shards=localhost:8983/solr/ shard2,localhost:7574/solr/ shard4

collections – Parameter

Neu mit der SolrCloud wurde der collections-Parameter eingeführt. Mit diesem Parameter kann man definieren, welche Collection man durchsuchen möchte. Dies muss nicht zwingend die Collection sein, zu der der befragte Core gehört. Im nachfolgenden Beispiel wird die Collection collection1 durchsucht.

https://localhost:8983/solr/core1/select?q=*:*&collection=collection1

Man kann auch mehrere Collections definieren, die durchsucht werden sollen. Dies ermöglicht größere Flexibilität bei der Planung des Cloud SetUp.

https://localhost:8983/solr/core1/select?q=*:*collection=collection1,collection2,collection3

Das obige Beispiel zeigt, wie man drei komplette Collections durchsuchen kann.

distrib – Parameter

Ein weiterer neuer Parameter ist distrib. Setzt man diesen auf false wird eine Verteilung des Requests deaktiviert; es wird tatsächlich der angesprochene Core durchsucht. Dies ist vor allem während der Entwicklung oder des Debuggings sehr hilfreich.

https://localhost:8983/solr/core1/select?q=*:*&distrib=false

magic collection – Distributor

Es gibt einen kleinen Wermutstropfen bei der Suche in der SolrCloud. Man darf zwar jeden beliebigen SolrCore ansprechen, jedoch muss der Core auch auf der angesprochenen Solr Instanz vorhanden sein. In der SolrCloud kann aber beispielsweise ein Core (core) auf Solr Instanz 1 (localhost:8983) vorhanden sein und aber nicht auf Solr Instanz 2 (localhost:8984). In diesem Szenario bedeutet dies, dass der Request nicht wie folgt aufgebaut sein darf, da der Core nicht auf dem zweiten Server existiert.

https://localhost:8984/solr/core/select?q=*:*

Dies bedeutet, dass die Generierung der URL aufwendig sein kann. Hier kann man sich jedoch leicht Abhilfe schaffen, in dem man einen leeren SolrCore definiert, der auf allen Solr Instanzen der Cloud enthalten ist. Dieser Core dient nur als Request – Distributor. Im Zusammenspiel mit den ganzen Parametern (shards und collections) kann dann der Request sehr einfach generiert werden.

https://localhost:8983/solr/distrib/select?q=*:*&collection=collection1
Weiterführende Informationen