SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

286 Plugins, 197 contribs sur SPIP-Zone, 338 visiteurs en ce moment

Accueil > Navigation > Recherche > Indexer > Indexer : Installation et Configuration

Indexer : Installation et Configuration

6 octobre 2014 – par cam.lafit, Fil, Matthieu Marcillaud, RastaPopoulos – 36 commentaires

4 votes

Introduction

Pour comprendre l’intérêt du plugin, nous invitons à lire l’article suivant Indexer : Introduction. Le fonctionnement de la boucle SPHINX est expliqué dans cet article :
Indexer : La boucle SPHINX. La suite de l’article aborde uniquement l’installation et la configuration du plugin Indexer et du moteur Sphinx .

Rappel pour les lecteurs inattentifs, il faut installer Sphinx en plus du plugin.

Compatibilité

Le plugin Indexer (compatible SPIP 2.1 et SPIP 3.x) exploite le mode RT (real-time), l’API mysql, et les fonctionnalités JSON de Sphinx. Pour cette raison il ne fonctionne qu’à partir de la version 2.2 de Sphinx.

Note : l’ancien plugin SPIP Sphinx (doc) exploite le mode standard de Sphinx, et son API native.

Description technique

Le mode RT de Sphinx permet à tout moment d’enrichir ou d’actualiser les contenus de Sphinx, par l’intermédiaire de requêtes proches de l’écriture SQL, et donc assez familières. Ainsi, le plugin Indexer actualise l’index de Sphinx après chaque modification d’un contenu dans SPIP. La page exec=indexer permet d’indexer ou de réindexer tous les contenus du site.

Le plugin intègre quelques documentations : 
http://zone.spip.org/trac/spip-zone/browser/_plugins_/indexer/trunk/doc

Notamment, par défaut, il utilise un index nommé ’spip’, ayant les champs suivants :

  • title
  • summary
  • content
  • date
  • uri
  • properties
  • signature

On peut imaginer un index Sphinx à la manière d’une table SQL. Chaque entrée dans l’index est appelé un document. Ici, un document à certains champs assez communs. Mais nous pouvons détailler :

properties : est un champ de type JSON dans lequel on peut stocker toute information structurée que l’on souhaite. D’ailleurs, par défaut, le plugin Indexer stocke déjà dedans, pour les articles envoyés à sphinx, les éléments suivants :

  • authors : liste des auteurs de l’article
  • tags : liste des mots clés de l’article
  • objet : ’article’ (type d’objet SPIP)
  • id_objet : identifiant de l’objet
  • lang : langue de l’article.

signature : est une signature calculée automatiquement à partir des contenus envoyés et du secret du site. Cette signature pourrait être recalculée pour vérifier que les données dans Sphinx n’ont pas été altérées.

Installation de Sphinx

Sphinxsearch fournit un ensemble de paquets selon les environnements serveurs (Windows, Linux, Debian, ....) depuis la page :
http://sphinxsearch.com/downloads/release/

Le point important est de prendre un version supérireure à 2.2

L’installation est à effectuer selon votre environnement (exe, yum, apt-get/aptitude, ....)

Vous pouvez contrôler le bon fonctionnement de Sphinx via la commande suivante (à exécuter en root ou assimilé)

  1. searchd

Création de la configuration Debian et dérivés

Il faut créer le fichier de configuration de sphinx dans /etc/sphinx/sphinx.conf.
Un fichier d’exemple est fourni avec le paquet debian/ubuntu.

Nous pouvons utiliser du PHP pour gérer la configuration dans des fichiers séparés dans /etc/sphinx/conf.d-enabled/. On en profite pour créer le répertoire manquant sous Ubuntu/Debian :

Fichier /etc/sphinx/sphinx.conf

  1. #!/usr/bin/env php
  2. <?php
  3. # Correction bug paquet debian / ubuntu
  4. if (!is_dir('/var/run/sphinx')) {
  5. mkdir('/var/run/sphinx');
  6. }
  7. # Recherche et inclusions des configurations
  8. foreach (glob(__DIR__ . '/conf.d-enabled/*.conf') as $conf) {
  9. include $conf;
  10. }

Télécharger

Créer le répertoire /etc/sphinx/conf.d-enabled (et éventuellement conf.d-available)

Dans conf.d-enabled, mettre :

  • le fichier 0_charsets.conf
    • Remarque : C’est un script il doit donc avoir les droits d’exécution.
  • le fichier searchd.conf :
    On précise les IP d’écoute, pour restreindre au serveur local pensez à mettre 127.0.0.1 et non l’ip publique de votre serveur.

On peut noter que Sphinx fournit plusieurs connecteurs sur divers ports :

    • API interface "native" 9312
      listen = 127.0.0.1:9312
    • API interface "SphinxQL" 9306
      listen = 127.0.0.1:9306:mysql41
  • le fichier spip.conf :

Relancer le démon searchd une fois ceci effectué :

  1. sudo searchd --stop
  2. sudo searchd
  3.  
  4. # ou
  5. sudo service sphinxsearch restart

Télécharger

Tester que Sphinx est bien lancé

Se connecter à Sphinx via le client mysql ou mariadb :

  1. mysql -h0 -P9306

Quelques commandes :

  • show tables; : liste l’ensemble des indexes
  • describe spip; : décrit les champs d’un index
  1. > show tables;
  2. +-------+------+
  3. | Index | Type |
  4. +-------+------+
  5. | spip | rt |
  6. +-------+------+
  7. 1 row in set (0.00 sec)
  8.  
  9. > describe spip;
  10. +------------+-----------+
  11. | Field | Type |
  12. +------------+-----------+
  13. | id | bigint |
  14. | title | field |
  15. | summary | field |
  16. | content | field |
  17. | date | timestamp |
  18. | title | string |
  19. | summary | string |
  20. | content | string |
  21. | uri | string |
  22. | signature | string |
  23. | properties | json |
  24. +------------+-----------+
  25. 11 rows in set (0.00 sec)

Télécharger

Préparer SPIP et indexer ses articles

Si sphinx est actif (on peut se connecter à lui via mysql), on peut alors, si il est installé sur le même serveur que le site SPIP, directement l’interconnecter avec SPIP.

Pour ce faire, télécharger et activer le plugin Indexer.
Une fois actif, aller sur la page ecrire/?exec=indexer.
L’interface est encore très sobre, mais on peut démarrer l’indexation de tous les articles du site en cliquant « démarrer ». Cela peut prendre un peu de temps en fonction de la machine et du nombre d’articles.

Une fois indexé, une page (joliment affichée si « spipr-dist » est actif) peut être visitée pour tester un peu : ?page=sphinx. Cette page affiche un champ de recherche, ainsi que des facettes sur les auteurs, les mots clés ou la date.

Voir en ligne : http://plugins.spip.net/indexer

Dernière modification de cette page le 5 décembre 2016

Retour en haut de la page

Tout afficher

Vos commentaires

  • Le 16 novembre à 15:23, par Ben En réponse à : Indexer : Installation et Configuration

    Bonjour,

    J’ai du mal à installer Sphinx car l’étape d’installation n’est toujours pas claire à mon niveau. Quelqu’un pour expliquer à un débutant ?

    Répondre à ce message

  • Le 6 novembre à 16:54, par Maïeul En réponse à : Indexer : Installation et Configuration

    Est-ce qu’il est envisageable que les mots clefs, à la place d’être tous mélangé dans une propriété « tags » soient dans des propriétés spécifiques correspondant au groupe de mot clefs ?

    Répondre à ce message

  • Le 9 octobre à 09:38, par philooo En réponse à : Indexer : Installation et Configuration

    Est ce qu’il est possible de faire des appel a SPHINX mais seulement sur les facettes ?

    L’idee ca serait d’utiliser le moteur de SPHINX pour filtrer les articles avec plusieurs mot cles spécifiques, sans tenir compte du contenu des articles.

    Pour le moment il est tres difficile avec les boucles SPIP de faire des requêtes pour filtrer les articles en se basant sur plusieurs mots cle.

    Si on pouvait faire ca avec le moteur SPHINX, on pourrait vraiment apporter un grosse fonctionnalité a SPIP : une boucle mot avec le critère AND, alors que pour le moment la seule chose disponible c’est le critère OR avec la syntaxe ... motIN(1,2,3...)

    • Le 9 octobre à 09:58, par Fil En réponse à : Indexer : Installation et Configuration

      c’est sans doute possible mais un peu disproportionné. Le plus adapté à ton besoin serait probablement d’écrire un critère spécifique, qui fasse exactement ce que tu souhaites.

    • Le 9 octobre à 11:35, par philooo En réponse à : Indexer : Installation et Configuration

      Le truc c’est que mon site a plusieurs centaines de milliers d’articles et plusieurs centaines de mots cle.

      Et avec le système de boucles je doit gérer une table qui liste les combinaisons de mot sinon les requêtes sont trop lentes. j’utilise ce système sur mon site : topspeed.in
      j’autorise la selection d’un mot par groupe pour le moment via la navigation principale :
      cars + audi + sedan + future cars + ...

      Ca fonctionne mais cest complique

      La puissance du moteur Sphinx pourrait bien m’aider au niveau de la gestion des relations de mots cle / ’facettes’ en language Sphinx. Je vois que Sphinx est tres puissant / rapide. Donc si il pouvait être utilise pour renvoyer rapidement une liste des articles en fonction des facettes, ca serait une grosse innovation pour spip.

      j’ai vu sur un site dont je ne me rappel plus le nom qu’ils faisaient un filtrage des résultât par facette, donc cest un peu la meme idée mais en eliminant la fonction de recherche sur le texte quoi ;) c’est limitatif mais ca serait un joli moteur a mettre sous le capot de spip ;)

    • Le 9 octobre à 11:57, par RastaPopoulos En réponse à : Indexer : Installation et Configuration

      Oui, moi je n’utilise pas les mots-clés parce que ça me saoule d’avoir plusieurs trucs différents pour faire la même chose (ranger), donc j’utilise Polyhiérarchie, mais sur le principe c’est ce que j’ai fait : pour les rubriques j’ai ajouté différents nouveaux critères SPIP pour faire des ET, etc.

      D’ailleurs pour les mots ça existe en partie déjà : le plugin {mots} qui rajoute le critère du même nom.

    • Le 9 octobre à 11:59, par RastaPopoulos En réponse à : Indexer : Installation et Configuration

      Ah et pour répondre à la question de départ quand même : peut-être que c’est disproportionné suivant les cas, mais par contre c’est parfaitement possible oui, il n’y a aucun problème. Dans ta boucle SPHINX tu mets bien les critères que tu veux… comme dans n’importe quelle autre boucle SPIP.

    Répondre à ce message

  • Le 5 juin à 14:10, par Phenix En réponse à : Indexer : Installation et Configuration

    SPIP semble essayer d’insérer des choses dans l’index de Sphinx, mais cela ne fonctionne pas :

    2016-06-05 14:06:24  (pid 8603) plugins/auto/indexer/v2.7.2/lib/Sphinx/SphinxQL/SphinxQL.php:L34:query()::Pub:info:
                            REPLACE INTO spip
                                    (id,  title, summary, content, date, date_indexation, uri, properties, signature)
                            VALUES
                    ('2768210780', 'Hiérarchie des rubriques', '', '', '', '1465128384', '', '{\"objet\":\"hierarchie\",\"id_objet\":\"rubriques\",\"source\":\"http:\\/\\/localhost\\/personnel\\/shop.be\",\"hierarchie\":{\"443874055a36fa172d22410a8bcc95c6\":{\"titre\":\"Informatiques\",\"rang\":\"1\",\"profondeur\":1,\"id_parent\":0,\"hash_parent\":\"\"},\"d8956e6b23f7ed02a9250a28b90e0a8f\":{\"titre\":\"Accessoires\",\"rang\":\"\",\"profondeur\":2,\"id_parent\":1,\"hash_parent\":\"443874055a36fa172d22410a8bcc95c6\"},\"8f3c0ccda0ae1020a4fedc4fd92b53c9\":{\"titre\":\"Composants\",\"rang\":\"\",\"profondeur\":2,\"id_parent\":1,\"hash_parent\":\"443874055a36fa172d22410a8bcc95c6\"},\"9456625a80b3df67b730e92e5832b615\":{\"titre\":\"Machines compl\\u00e8tes\",\"rang\":\"\",\"profondeur\":2,\"id_parent\":1,\"hash_parent\":\"443874055a36fa172d22410a8bcc95c6\"},\"32833aa4ec41927a0550f3f8526d9433\":{\"titre\":\"V\\u00e9hicule\",\"rang\":\"2\",\"profondeur\":1,\"id_parent\":0,\"hash_parent\":\"\"},\"cc0d2ca7c34109864c97deb1ae863d06\":{\"titre\":\"Immobilier\",\"rang\":\"3\",\"profondeur\":1,\"id_parent\":0,\"hash_parent\":\"\"},\"65355505a207567c28399500194e36ed\":{\"titre\":\"Int\\u00e9rieur\",\"rang\":\"4\",\"profondeur\":1,\"id_parent\":0,\"hash_parent\":\"\"},\"61a201510520fd56c8f80138bf3425b0\":{\"titre\":\"V\\u00eatements\",\"rang\":\"5\",\"profondeur\":1,\"id_parent\":0,\"hash_parent\":\"\"},\"1a3304e864c04534ce166ed59f096aaa\":{\"titre\":\"Divers\",\"rang\":\"6\",\"profondeur\":1,\"id_parent\":0,\"hash_parent\":\"\"}}}', '2b62cdd6a9f00b39c4c57df37e6daea8')
    2016-06-05 14:06:24  (pid 8603) plugins/auto/indexer/v2.7.2/lib/Indexer/Storage/Sphinx.php:L43:replaceDocuments()::Pub:info: Array
    (
       [0] => Array
           (
               [errno] => 1064
               [sqlstate] => 42000
               [error] => unknown column: 'date_indexation'
           )

    )

    Répondre à ce message

  • Le 1er juin à 19:43, par philooo En réponse à : Indexer : Installation et Configuration

    bon on a finalement reussi a mettre sphinx en place c’est super, mais maintenant on va essayer d’affiner les résultats.

    ma questions est la suivante : quel est le meilleur moyen de configurer sphinx pour renvoyer des resultats quand il n’y a pas de résultat pour la chaine de recherche entiere ?

    par exemple : bmw cabriolet bleu
    ca serait bien de montrer les : bmw cabriolet.

     :)

    le code est en place sur notre site : www.topspeed.in

    Phil

    • Le 1er juin à 21:01, par Fil En réponse à : Indexer : Installation et Configuration

      Pas évident, mais tu dois pouvoir le faire en exploitant le tableau META renvoyé par sphinx : pour chacun des mots de la requête il te dira quels mots ont combien d’occurrences, et tu pourras ensuite tenter diverses combinaisons.

    Répondre à ce message

  • Le 2 mars à 21:40, par goony En réponse à : Indexer : Installation et Configuration

    J’ai deux questions :

    -  Est-il possible de ne comparer la chaine de caractere de recherche qu’ avec les titres uniquement ?

    -  Est-il possible de mettre un critere pour ne selectionner que les documents qui ont un score minimum ? Car dans mes resultats j’ai des articles tres peu pertinents.

    Merci d’avance.

    • Le 2 mars à 22:15, par RastaPopoulos En réponse à : Indexer : Installation et Configuration

      Indexer : La boucle SPHINX plutôt donc (mais il manque plein de choses dans l’article).

      Je dirais de jouer avec les poids en ne mettant que le titre du coup (même 1 devrait suffire si on met pas les autres, à priori…)

      1. {option field_weights, "(title=10)"}

      À priori ya un « score » dans le select, donc tu dois pouvoir faire :

      1. {filtermono oui, score, 10, '>='}

      (le premier arg est un truc interprété en booléen, fixe ou le plus souvent dynamique, qui sert à dire si on applique le critère ou pas, puis ensuite la comparaison, l’opérateur est en dernier car la plupart du temps c’est = et donc il est facultatif)

    Répondre à ce message

  • Le 18 février à 08:47, par goony En réponse à : Indexer : Installation et Configuration

    Est-ce normal que dans

    /Sources/SpipSourcesIndexer.php

    a la ligne 105 on ait cette ligne :

    1. $sources->seek($infos['last']['source']);

    alors que la variable $infos n’est declaree ou utilisee nulle part ailleurs ?

    Répondre à ce message

  • Le 12 février à 15:50, par philooo En réponse à : Indexer : Installation et Configuration

    j’ai été voir sur spipr-dist pour trouver le squelette sphinx mais il semble ne plus être disponible

    ca serait sympa si quelqu’un pouvait poster ce squelette dans la contribution.

    Répondre à ce message

  • Le 13 janvier à 01:47, par philooo En réponse à : Indexer : Installation et Configuration

    bon ok je progresse, maintenant la page ?exec=indexer fonctionne mais j’ai un message d’erreur spip

    Mais j’ai un message d’erreure sur ce morceau :

    Temps pour Spip\Indexer\Sources\HierarchieMots :
    36.900 ms
    Analyse de Spip\Indexer\Sources\SpipDocuments :

    Temps pour indexer 826 documents (ids 153521 à 154521)
    Documents: 77 568.763 ms
    Enregistrement dans l'index: 14.778 ms
    Recharger la page pour continuer l'indexation
    {{SELECT titre, id_parent FROM spip_groupes_mots WHERE id_groupe = 4
      /     /   330 Erreur SQL 1054
    Unknown column 'id_parent' in 'field list' }}

    « Erreur SQL 1054
    Unknown column ’id_parent’ in ’where clause’
    SELECT * FROM spip_groupes_mots WHERE id_parent = 0 ORDER BY 0+titre,titre »

    J’ai essaye de modifier la configuration du plugin pour ne pas indexer les documents, mais quand je lance l’indexation, il semble que tout est analyse quand meme...

    je regarderais demain si j’arrive a fixer ce dernier soucis.

    j’avoue que je n’ai pas la dernière version de php sur mon server et que c’est peut être un problème.

    • Le 13 janvier à 09:09, par cam.lafit En réponse à : Indexer : Installation et Configuration

      Bonjour

      Cela ressemble à un bogue id_parent devrait soit exister, soit ne pas être présent dans la requête. J’ai fusionné les 2 messages sur ce sujet pour éviter de se disperser.

      Attention au sens Sphinx tout est document, tout comme les articles ou les documents au sens SPIP.

    • Le 13 janvier à 11:21, par RastaPopoulos En réponse à : Indexer : Installation et Configuration

      Au deux endroits où le champ « id_parent » est ajouté (indexer/jointure_mots + Sources/HierarchieMots), il y a toujours le test suivant : if (_DIR_PLUGIN_GMA) {.

      Donc « id_parent » n’est ajouté QUE si le plugin « Groupes de mots arborescents » est bien activé au moment où ça se passe.

      Donc 1) tu as ce plugin ?
      Et 2) il est mal installé donc ? le champ « id_parent » n’a pas été ajouté à la table des groupes ?

    • Le 13 janvier à 17:29, par philooo En réponse à : Indexer : Installation et Configuration

      Ben c’est étrange car j’ai pas le plugin ’mot arborescence’ d’installe...
      J’ai pu l’installe dans le passe, mais j’ai clairement pas de repertoire GMA
      J’ai le pluging MOTUS...

      comment je pourrais debugger ca ? et voir pourquoi cette variable _DIR_PLUGIN_GMA retourne ’true’ ?

      Enfin pour le moment j’ai commenter le code qui fait ce test dans
      /indexer/jointure_mots.php : if (_DIR_PLUGIN_GMA)
      ./Sources/HierarchieMots.php : if (_DIR_PLUGIN_GMA)

      Et la page d’indexation marche maintenant sans erreure...

    • Le 13 janvier à 17:55, par RastaPopoulos En réponse à : Indexer : Installation et Configuration

      Toutes les variables statiques du type « _DIR_PLUGIN_TRUC » sont définies uniquement quand le plugin de préfixe « truc » est activé dans le site. Donc si ce define() est fait, c’est normalement que le plugin est activé.

      T’as pas des plugins ajoutés dans le dossier « plugins-dist » ? Qui fait que c’est toujours activé ?

      Pour tester un bug, il faut de toute façon tester en désactiver TOUS les plugins nécessaires, avec un SPIP tout nu, puis si ça marche, en réactiver un par un pour voir qui fait planter.

    • Le 21 janvier à 10:11, par RastaPopoulos En réponse à : Indexer : Installation et Configuration

      Bon normalement ça devrait VRAIMENT être corrigé avec ça
      http://zone.spip.org/trac/spip-zone/changeset/94686

      C’est moi, désolé, j’avais mal fait les tests, car une variable statique renvoie toujours son propre nom quand elle n’existe pas, donc c’est considéré comme True puisque c’est une chaîne…

    Répondre à ce message

  • Le 13 janvier à 18:32, par philooo En réponse à : Indexer : Installation et Configuration

    On dirait que la page de recherche page=sphinx
    n’est plus incluse dans le squelettes spipr-dist
    si quelqu’un l’a sous la main je suis preneur :)

    en attendant je vais essayer d’aller voir l’article avec la boucle sphinx..

    • Le 14 janvier à 00:27, par philooo En réponse à : Indexer : Installation et Configuration

      j’ai simplement mis la boucle sphinx que j’ai récupère sur spip-contrib

      malheureusement ca ne me retourne aucun résultat.

      difficile de savoir si l’indexation marche..

    • Le 14 janvier à 07:48, par cam.lafit En réponse à : Indexer : Installation et Configuration

      Bonjour

      Pour contrôler le bon comportement de l’indexation, il est possible :

      • d’utiliser la page privée d’indexation qui indiquera un état du traitement
      • de faire une requete SQL sur la connexion fournie par SPhinx

      Si l’une ou l’autre retournent des résultat, alors il s’agit d’un problème de boucle. Dans le cas contraire, il est possible que la configuration soit incomplète.

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Mode portail Communiquant pour SoyezCréateurs

    29 septembre 2010 – 20 commentaires

    5e mode d’affichage de la page d’accueil, ce mode se distingue des autres par une animation proposant un fondu/enchaîné des logos des articles à la une. Zonage Configuration Zone d’entête Nom du site Slogan si plugin bandeau présent (...)

  • Configurer Sparkpost

    25 avril – 14 commentaires

    N’hésitez pas à relire le préambule de cette rubrique avant de créer un compte sur une plateforme tierce . Présentation Sparkpost est une société d’envoi de mailing https://www.sparkpost.com/ Sur les petits volumes ( <100.000 emails / mois), (...)

  • Plugin Logo SVG : pouvoir utiliser des logos SVG

    17 octobre – commentaires

    Le SVG est un format vectoriel donc très léger et redimensionnable sans pertes, mais SPIP ne l’acceptait pas sur les logos. Ce plugin comble ce manque. Comment ça fonctionne ? Vous installez ce plugin, vous l’activez, et c’est tout. Crédits Une (...)

  • Utilisez le framework Foundation dans vos squelettes !

    13 août 2013 – 58 commentaires

    Foundation est un framework CSS et Javascript très complet pour réaliser des sites sur une grille propre et homogène. Mais surtout, il permet de rendre un site responsive très facilement ! Ce plugin ajoute le framework Foundation sur l’espace (...)

  • LinkCheck : vérificateur de liens

    13 février 2015 – 65 commentaires

    Ce plugin permet de chercher et tester l’ensemble des liens présents dans les objets. Vous pourrez donc en quelques clics connaître les liens brisés ou défectueux qui se sont immiscés dans le contenu de votre site SPIP. La vérification s’effectue en (...)

Ça spipe par là