Apache Solr

Siehe auch

Apache Solr ist eine Open-Source-Suchplattform, die auf Apache Lucene basiert. Solr bietet Funktionen wie Volltextsuche, Facettenbildung, Indexierung von Daten und verteilte Suchfunktionen. Solr ist in Java geschrieben und bietet eine RESTful HTTP-Schnittstelle für die Kommunikation.

Solr behandelt Daten als Dokumente, die in einem Schema organisiert sind, und verwendet die Lucene Query Syntax für Abfragen. Es wird oft mit anderen Apache-Projekten wie Apache Nutch, Apache ZooKeeper (für die Konfigurationsverwaltung) oder Apache ManifoldCF eingesetzt.

Apache Solr benötigt eine aktuellere Java 11+-Runtime. Es wird mit einem integrierten Apache Tomcat geliefert.

Links:

Installation

  • Mit dem mitgelieferten Install-Script (nicht empfohlen, da es systemd nicht kennt und das Log-Verzeichnis nicht in /var/log setzt).
    Es wird eine aktuelle Java-Version benötigt:
    dnf -y install java-latest-openjdk
    Dann per Install-Script aus der heruntergeladenen tgz-Datei:
    sudo bash ./install_solr_service.sh /path/to/solr-9.4.0.tgz -i /opt -d /var/solr -u solr -s solr -p 8983

Verwendung

Manueller Start:

cd /opt/solr
bin/solr -help

sudo -u solr bin/solr start -p 8983

Aufruf des Admin-Interface:

Cores/Collections

In Apache Solr haben „Cores“ und „Collections“ unterschiedliche Bedeutungen und Anwendungsfälle:

Cores (Kerne):

  • Ein Solr Core repräsentiert einen einzelnen, unabhängigen Suchindex.

  • Jeder Core hat seine eigene Konfiguration, Schema und Datenverzeichnis.

  • Cores werden oft verwendet, um verschiedene Datensätze zu isolieren oder unterschiedliche Suchkonfigurationen innerhalb einer einzelnen Solr-Instanz bereitzustellen.

  • Cores ermöglichen es, mehrere Indizes unabhängig innerhalb derselben Solr-Serverinstanz zu verwalten.

Collections (Sammlungen):

  • Eine Solr Collection ist umfasst einen oder mehrere Cores.

  • Collections werden oft in einer verteilten Solr-Konfiguration verwendet, um horizontale Skalierbarkeit zu ermöglichen.

  • Jeder Core innerhalb einer Collection repräsentiert einen Shard, und gemeinsam bilden sie einen verteilten Index.

  • Collections unterstützen Funktionen wie automatische Sharding und Replikation für verbesserte Skalierbarkeit und Ausfallsicherheit.

Core erstellen - per Kommandozeile:

cd bin
solr create -c 'my-core'

Collection erstellen - per URL:

curl "http://solr:8983/solr/admin/collections?action=CREATE&name=my-core&numShards=1"

solrconfig.xml

Die solrconfig.xml wird für jeden Core/jede Collection im conf/-Unterordner abgelegt, also beispielsweise in /var/solr/data/my-core/conf/solrconfig.xml.

Plugins / Packages / Module

Bemerkung

Der Package Manager bin/solr package ... läuft nur in SolrCloud.

Data Import Handler:

cd /opt/solr/lib
wget https://github.com/SearchScale/dataimporthandler/releases/download/v9.4.0/data-import-handler-9.4.0.jar
wget https://github.com/SearchScale/dataimporthandler/releases/download/v9.4.0/mariadb-java-client-2.6.0.jar

chown -R solr:solr /opt/solr
systemctl restart solr

MariaDB Connector/J:

cd /opt/solr/lib
wget https://dlm.mariadb.com/3478935/Connectors/java/connector-java-3.3.0/mariadb-java-client-3.3.0.jar

chown -R solr:solr /opt/solr
systemctl restart solr

Wer Module testen möchte, die über die Config-Datei geladen werden, ruft diese per URL auf: http://solr:8983/solr/<my-core>/select?q=*:*&wt=xslt

Authentication

Um Apache Solr mit Benutzernamen und Passwörtern abzusichern, eine security.json in /var/solr abzulegen:

/var/solr/security.json
{
    "authentication":
    {
        "blockUnknown": true,
        "class": "solr.BasicAuthPlugin",
        "credentials":
        {
            "solr-admin": "IV0EHq1OnNrj6gv...XhgrF8c="
        },
        "realm": "My Solr users",
        "forwardCredentials": false
    },
    "authorization":
    {
        "class": "solr.RuleBasedAuthorizationPlugin",
        "permissions":
        [
            {
                "name": "all",
                "role": "admin"
            }
        ],
        "user-role":
        {
            "solr": "admin"
        }
    }
}

Mögliche Permission-Names für die Definition eigener Rollen:

  • all

  • collection-admin-edit

  • collection-admin-read

  • config-edit

  • config-read

  • core-admin-edit

  • core-admin-read

  • filestore-read

  • filestore-write

  • health

  • metrics-read

  • package-edit

  • read

  • schema-edit

  • schema-read

  • security-edit

  • security-read

  • update

  • zk-read

Das Passwort für den Benutzer „solr-admin“ gehasht per Bash so erstellt:

dnf -y install pwgen

PW='linuxfabrik'
SALT=$(pwgen 48 -1)
echo "$(echo -n "$SALT$PW" | sha256sum --binary | xxd -r -p | sha256sum --binary | xxd -r -p | base64 --wrap=1024) $(echo -n "$SALT" | base64 --wrap=1024)"

Bemerkung

The ‚all‘ permission should always be the last permission in your config so that more specific permissions are applied first.

Built on 2024-02-28