Howto Solr
- Documentation : https://cwiki.apache.org/confluence/display/solr/
- Rôle Ansible : https://gitea.evolix.org/evolix/ansible-roles/src/branch/stable/lxc-solr
- Statut de cette page : test / bookworm
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