Howto Solr

Howto Solr

Solr est un logiciel de moteur de recherche s’appuyant sur la bibliothèque de recherche Lucene et conçue sous licence libre. Il communique avec le client à l’aide d’une interface de programmation en XML et JSON, généralement via le protocole HTTP.

Installation

On télécharge le tarball souhaité sur https://solr.apache.org/downloads.html

# tar xpvf solr-9.8.1.tgz
# cd solr-9.8.1/
# bin/install_solr_service.sh ../solr-9.8.1.tgz -d /home/solr

id: « solr » : utilisateur inexistant
Creating new user: solr
Ajout de l'utilisateur système « solr » (UID 137) ...
Ajout du nouveau groupe « solr » (GID 153) ...
Ajout du nouvel utilisateur « solr » (UID 137) avec pour groupe d'appartenance « solr » ...
Création du répertoire personnel « /tmp/solr » ...

Extracting /tmp/solr-9.8.1.tgz to /opt

Installing symlink /opt/solr -> /opt/solr-9.8.1 ...

Installing /etc/init.d/solr script ...

Installing /etc/default/solr.in.sh ...

Service solr installed.
Customize Solr startup configuration in /etc/default/solr.in.sh
● solr.service - LSB: Controls Apache Solr as a Service
     Loaded: loaded (/etc/init.d/solr; generated)
     Active: active (exited) since Mon 2025-03-31 09:55:21 CEST; 5s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 2239445 ExecStart=/etc/init.d/solr start (code=exited, status=0/SUCCESS)
        CPU: 11ms

Par défaut, Solr crée un utilisateur solr, s’installe dans /opt et tourne sur le port TCP/8983.

Nous préférons ainsi restreinte Solr dans un conteneur LXC. C’est ce que fait notre rôle Ansible.

Ce rôle peut être utilisé avec un playbook comme ceci :

- hosts: all
  gather_facts: yes
  become: yes

  vars:
    lxc_containers:
      - name: solr8
        release: stretch
        solr_version: 8.8.2
        solr_port: 8985
      - name: solr9
        release: bookworm
        solr_version: 9.8.1
        solr_port: 8986

  roles:
    - lxc-solr

Configuration

On peut configurer Solr via le fichier /etc/default/solr.in.sh.

Si l’on veut par exemple qu’il écoute sur toutes les interfaces réseau :

SOLR_JETTY_HOST="0.0.0.0"

Pour éviter un message It should be set to 65000 to avoid operational disruption. on peut mettre dans /etc/security/limits.conf :

solr    soft    nofile  65000
solr    soft    nproc   65000

Note : certains passent plutôt par par systemd mais cela ne semble pas fonctionner.

Modules

Solr est fourni avec plusieurs modules :

$ ls /opt/solr/modules/
analysis-extras  clustering  extraction      hadoop-auth  jaegertracer-configurator  langid  ltr            s3-repository  sql
analytics        cross-dc    gcs-repository  hdfs         jwt-auth                   llm     opentelemetry  scripting

Si l’on veut activer des modules, on peut passer par /etc/default/solr.in.sh :

SOLR_MODULES=extraction,langid,ltr,analysis-extras

Pour un core, il pourra activer les modules via data/CORE/conf/solrconfig.xml par exemple :

<lib dir="${solr.install.dir:../../../..}/modules/extraction/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/modules/langid/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/modules/ltr/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/modules/analysis-extras/lib/" regex=".*\.jar" />

Pour ajouter des modules ou plus d’informations, voir https://solr.apache.org/guide/solr/latest/configuration-guide/solr-modules.html

Administration

Via systemd :

# systemctl stop solr
# systemctl start solr
# systemctl status solr

On peut aussi avoir des infos via la commande solr :

# su - solr
$ cd /opt/solr/bin
$ ./solr --help
Usage: solr COMMAND OPTIONS
       where COMMAND is one of: start, stop, restart, status, 
                                healthcheck, create, delete, auth, assert, config, export, api, package, post, 
                                zk ls, zk cp, zk rm , zk mv, zk mkroot, zk upconfig, zk downconfig,
                                snapshot-create, snapshot-list, snapshot-delete, snapshot-export, snapshot-prepare-export

$ ./solr status

Solr process 2247504 running on port 8983
WARNING: URLs provided to this tool needn't include Solr's context-root (e.g. "/solr"). Such URLs are deprecated and support for them will be removed in a future release. Correcting from [http://localhost:8983/solr/] to [http://localhost:8983/].
{
  "solr_home":"/home/solr/data",
  "version":"9.8.1 dab835e4a3249780230e5b1cefebffdf15ad5c96 - houston - 2025-03-06 13:59:17",
  "startTime":"Mon Mar 31 10:28:22 CEST 2025",
  "uptime":"0 days, 0 hours, 18 minutes, 8 seconds",
  "memory":"201.5 MB (%39.3) of 512 MB"}

Mais également Solr a une interface d’administration web : http://localhost:8983/solr/

Core Solr

Solr a la notion de core : on peut lancer plusieurs cores sur un même Solr.

On peut voir et créer les cores via l’interface d’administration web.

On peut aussi créer un core en ligne de commande :

# su - solr
$ cd /opt/solr/bin
$ ./solr create -c test
Neither --zk-host or --solr-url parameters provided so assuming solr url is http://localhost:8983.
WARNING: Using _default configset. Data driven schema functionality is enabled by default, which is
         NOT RECOMMENDED for production use.

         To turn it off:
            curl http://localhost:8983/solr/test/config -d '{"set-user-property": {"update.autoCreateFields":"false"}}'
         Or:
            bin/solr config -c test -s http://localhost:8983 --action set-user-property --property update.autoCreateFields --value false

Created new core 'test'

On peut ensuite configurer chaque core via le répertoire data/CORE/conf/ notamment via schema.xml, solrconfig.xml ou encore solrcore.properties.

Pour supprimer un core :

$ ./solr delete -c test
Deleting core 'test' using CoreAdminRequest

Mise à jour de Solr

Exemple de mise à jour de Solr 8.1.1 à 8.1.3 :

# cd /var/lib/lxc/solr8/rootfs/opt/
# wget http://apache.crihan.fr/dist/lucene/solr/8.3.1/solr-8.3.1.zip
# unzip solr-8.3.1.zip
# lxc-attach -n solr8
# cd /opt/
opt# systemctl stop solr
opt# unlink solr
opt# ln -s /opt/solr-8.3.1 solr
opt# systemctl start solr