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