Je reviens vers vous avec un autre article sur la série Ibexa, nous allons voir comment configurer et mettre en place un système d’indexation de contenu.
Le point d’entrée est ici :
Nous allons utiliser Docker pour mettre en place SOLR, je partage ici notre fichier docker-composer.yaml qui a changé depuis le dernier article
version: '3'
services:
database:
container_name: bdd_ibexa_oss
image: 'mysql:5.7'
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: main
ports:
- '3306'
mailer:
container_name: mailer_ibexa_oss
image: schickling/mailcatcher
ports: [1025, 1080]
redis:
image: 'redis:latest'
container_name: redis_ibexa_oss
ports:
- 6379:6379
phpmyadmin:
image: phpmyadmin
container_name: phpmyadmin_ibexa_oss
restart: always
depends_on:
- database
ports:
- 8282:80
environment:
PMA_HOST: database #to have the same value as service BDD
solr:
image: 'solr:7.7'
container_name: solr_ibexa_oss
volumes:
- './provisionning/solr/entrypoint.bash:/entrypoint.bash:ro'
- './provisionning/solr/model/custom-fields-types.xml:/opt/solr/vendor/custom-fields-types.xml'
- './provisionning/solr/model/language-fieldtypes.xml:/opt/solr/vendor/language-fieldtypes.xml'
- './provisionning/solr/model/schema.xml:/opt/solr/vendor/schema.xml'
ports:
- '8983:8983'
entrypoint: /entrypoint.bash
environment:
- DEV_UID
- DEV_GID
- SOLR_CORES=collection1
Donc nous avons ajouté les services redis/phpmyadmin et solr. On fera d’autres articles sur Docker …
Les fichiers du dossier model sont dans le chemin suivant :
- oss-skeleton/vendor/ezsystems/ezplatform-solr-search-engine/lib/Resources/config/solr/
Pour Solr, l’important est la configuration entrypoint et volumes, je vous mets le code du bash entrypoint.bash
Dans votre fichier .env ou .env.local, il faut renseigner la bonne valeur legacy (pas de moteur d’indexation)/elasticsearch ou bien solr
SEARCH_ENGINE=solr
SOLR_DSN=http://localhost:8983/solr
SOLR_CORE=collection1
Ibexa propose un fichier par défaut : ezplatform_solr.yaml
# Base configuration for Solr, for more options see: https://doc.ezplatform.com/en/latest/guide/search/#solr-bundle
# Can have several connections used by each eZ Repositories in ezplatform.yml
parameters:
# Solr root endpoint, relevant if `solr` is set as search_engine
solr_dsn: '%env(SOLR_DSN)%'
solr_core: '%env(SOLR_CORE)%'
ez_search_engine_solr:
endpoints:
ibexa_oss:
dsn: '%solr_dsn%'
core: '%solr_core%'
connections:
default:
entry_endpoints:
- ibexa_oss
mapping:
default: ibexa_oss
J’ai changé le nom d’endpoint par ibexa_oss
N’oubliez pas de lancer docker-compose up -d une fois tout est OK, vous pouvez accéder à cette interface, très utile
- http://127.0.0.1:8983/solr/#/
- http://127.0.0.1:8983/solr/#/collection1/query (pour vérifier le contenu indexé)
Il nous vous reste qu’à créer du contenu depuis votre back office.
Vous pouvez aussi lancer la commande d’indexation de contenu depuis votre terminal :
- php bin/console ibexa:reindex
Plus de détail dans le lien suivant : https://doc.ibexa.co/en/3.3/guide/search/solr/
Le contenu de fichier entrypoint.bash
#!/usr/bin/env bash
# Check if missing template folder
DESTINATION_EZ="/opt/solr/ezsolr/server/ez"
DESTINATION_VENDOR="/opt/solr/vendor"
DESTINATION_TEMPLATE="${DESTINATION_EZ}/template"
if [ ! -d ${DESTINATION_TEMPLATE} ]; then
cd $PROJECTMAPPINGFOLDER/ezplatform
mkdir -p ${DESTINATION_TEMPLATE}
cp -R /opt/solr/vendor/* ${DESTINATION_TEMPLATE}
fi
# Check for solr config folder (changes btw 6 and 7)
SOURCE_SOLR="/opt/solr/server/solr/configsets/_default/"
if [ ! -d ${SOURCE_SOLR} ]; then
SOURCE_SOLR="/opt/solr/server/solr/configsets/basic_configs/"
fi
mkdir -p ${DESTINATION_EZ}
if [ ! -f ${DESTINATION_EZ}/solr.xml ]; then
cp /opt/solr/server/solr/solr.xml ${DESTINATION_EZ}
cp ${SOURCE_SOLR}/conf/{currency.xml,solrconfig.xml,stopwords.txt,synonyms.txt,elevate.xml} ${DESTINATION_TEMPLATE}
sed -i.bak '/<updateRequestProcessorChain name="add-unknown-fields-to-the-schema".*/,/<\/updateRequestProcessorChain>/d' ${DESTINATION_TEMPLATE}/solrconfig.xml
sed -i -e 's/<maxTime>${solr.autoSoftCommit.maxTime:-1}<\/maxTime>/<maxTime>${solr.autoSoftCommit.maxTime:20}<\/maxTime>/g' ${DESTINATION_TEMPLATE}/solrconfig.xml
sed -i -e 's/<dataDir>${solr.data.dir:}<\/dataDir>/<dataDir>\/opt\/solr\/data\/${solr.core.name}<\/dataDir>/g' ${DESTINATION_TEMPLATE}/solrconfig.xml
fi
SOLR_CORES=${SOLR_CORES:-collection1}
CREATE_CORES=false
for core in $SOLR_CORES
do
if [ ! -d ${DESTINATION_EZ}/${core} ]; then
CREATE_CORES=true
echo "Found missing core: ${core}"
fi
done
if [ "$CREATE_CORES" = true ]; then
touch ${DESTINATION_EZ}/solr.creating.cores
echo "Start solr on background to create missing cores"
/opt/solr/bin/solr -s ${DESTINATION_EZ}
for core in $SOLR_CORES
do
if [ ! -d ${DESTINATION_EZ}/${core} ]; then
/opt/solr/bin/solr create_core -c ${core} -d ${DESTINATION_TEMPLATE}
echo "Core ${core} created."
fi
done
echo "Stop background solr"
/opt/solr/bin/solr stop
rm ${DESTINATION_EZ}/solr.creating.cores
fi
/opt/solr/bin/solr -s ${DESTINATION_EZ} -f