Indexer : Installation et Configuration

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’. Cet index Sphinx ressemble beaucoup à une table SQL. Chaque entrée dans l’index est appelé un document. Ici, un document possède certains champs assez communs, qui sont détaillés dans la documention de l’indexation.

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é)

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/ ou /etc/sphinxsearch/conf.d-enabled/ . On en profite pour créer le répertoire manquant sous Ubuntu/Debian :

Fichier /etc/sphinx/sphinx.conf ou /etc/sphinxsearch/sphinx.conf

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

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

Dans conf.d-enabled, mettre :

  • le fichier 1_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 searchd fournit par défaut des 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 plugin Indexer n’utilise que l’inteface SphinxQL, il est donc tout à fait possible de désactiver l’interface 9312.

Si le répertoire de référence est sphinxsearch et non sphinx, pensez à corriger la config suivante en actualisant les chemins.

searchd
{
	# [hostname:]port[:protocol], or /unix/socket/path to listen on
	# known protocols are 'sphinx' (SphinxAPI) and 'mysql41' (SphinxQL)

#	listen		= 9306:mysql41
	listen		= 127.0.0.1:9306:mysql41

	pid_file		= /var/run/sphinx/searchd.pid

	log			= /var/log/sphinx/searchd.log
	query_log		= /var/log/sphinx/query.log
        binlog_path	= /var/lib/sphinx/
}
  • le fichier spip.conf :
    index spip{
            type = rt
            path = /var/lib/sphinxsearch/data/spip
    
            rt_field              = title
            rt_attr_string        = title
    
            rt_field              = summary
            rt_attr_string        = summary
    
            rt_field              = content
            rt_attr_string        = content
    
            rt_attr_timestamp     = date
            rt_attr_timestamp     = date_indexation
            rt_attr_string        = uri
    
            rt_attr_json          = properties
            rt_attr_string        = signature
    
            <?php
            echo _CHARSET_INDEXATION_FR ;
            ?>
    }

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

sudo searchd --stop
sudo searchd

# ou
sudo service sphinxsearch restart

Tester que Sphinx est bien lancé

Se connecter à Sphinx via le client mysql ou mariadb :

mysql -h0 -P9306

Quelques commandes :

  • show tables; : liste l’ensemble des indexes
  • describe spip; : décrit les champs d’un index
> show tables;
+-------+------+
| Index | Type |
+-------+------+
| spip  | rt   |
+-------+------+
1 row in set (0.00 sec)

> describe spip;
+------------+-----------+
| Field      | Type      |
+------------+-----------+
| id         | bigint    |
| title      | field     |
| summary    | field     |
| content    | field     |
| date       | timestamp |
| title      | string    |
| summary    | string    |
| content    | string    |
| uri        | string    |
| signature  | string    |
| properties | json      |
+------------+-----------+
11 rows in set (0.00 sec)

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.

La configuration de base se fait dans config/mes_options.php :

define('SPHINX_DEFAULT_INDEX', 'spip');
define('SPHINX_SERVER_HOST', '127.0.0.1');
define('SPHINX_SERVER_PORT', 9306);

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.

Interdire les écritures

Si vous utilisez ce plugin sur un site de préproduction, la configuration suivante permet d’interdire les écritures dans la base sphinx :

define('_INDEXER_READONLY', true);

Discussion

21 discussions

  • 1

    Salut !

    Est-ce que ce serait possible que les balises soient encodées séparément ?

    Sur notre site par exemple, tous nos mots-clefs sont avec des balises comme par exemple

    <multi>[fr]surveillance[nl]toezicht[en]monitoring</multi>

    Le plugin l’indexe comme tel

    <multi>[fr]surveillance[nl]toezicht[en]monitoring</multi>

    et permet d’ailleurs de filtrer sur &tag=[fr]surveillance[nl]toezicht[en]monitoring<%2Fmulti>

    alors que ce serait évidemment intéressant qu’il indexe surveillance, toezich, monitoring

    Répondre à ce message

  • 4

    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 ?

    • Bonjour, je relance cette question qui me concerne également. Je bloque après l’installation des répertoires et des fichiers, au moment où il est question de faire :
      sudo searchd —stop
      Etant sous Windows, ces commandes ne sont pas reconnues dans l’invité de commande. Et si je les tape dans MySQL, idem. L’installation du plugin s’est toutefois déroulée, j’ai bien enregistré Sphinx dans la libraire /lib du site et effectué tout le reste des manips décrites. Mais la page de configuration du plugin indique bien que Sphinx est vide de tout contenu (Connexion à l’index spip via 127.0.0.1:9306
      Statut : échec ; Base Sphinx vide.) Dans le test de Indexer : Analyse de Spip\Indexer\Sources\HierarchieRubriques :Temps pour indexer 1 hierarchie_rubriques (ids 1 à 1001)
      Documents : 8.205 ms ). Il doit y avoir une étape minime à faire, c’est dommage d’être bloqué. Merci d’avance.

    • Comme indiqué en titre de chapitre, la description de la config est pour Debian. Je ne sais absolument pas comme ça fonctionne pour windows (ni même si c’est toujours pris en charge), et je crois qu’aucun de mes camarades qui a participé au plugin ne travaille sous windows non plus.

    • Ah d’accord ! Merci pour l’info, j’avais bien lu Debian, mais étant donné que c’est aussi la distribution de mon site, je croyais que cela s’appliquait au site et non au système d’exploitation utilisateur. Dommage cependant.

    Répondre à ce message

  • Ne pas tenir compte du précédent message, j’avais bien installé (dans les téléchargements, hors console de commande et avant d’installer Python) la version 3.1.1 de Sphinx. Je m’y perds (effet Windows, sans doute !)

    Répondre à ce message

  • 1

    Mes excuses, encore une question : je ne comprends pas l’indication de prendre une version SPHINX supérieure ou égale à 2.2, car d’après cette page : https://www.sphinx-doc.org/en/master/changes.html la dernière version stable est la 2.0 (de mars 2019, que je viens d’installer sous Windows — oui ça fonctionne ! — en suivant les étapes et en installant au préalable Python) et les versions ultérieures en dev. sont 2.0.1, 2.1.0 et 3.0.0. Ou bien est-ce que je me trompe de programme ?

    • Oui c’est un autre logiciel. Le lien vers le bon site est collé juste avant la phrase dont tu parles qui dit > à 2.2.

    Répondre à ce message

  • 2

    Bonjour,

    Sur un réseau de site regrouper avec indexer, je me heurte à un problème avec les groupe de mots clef.
    Si je ne fais pas de recherche j’ai que les groupes du site où je me trouve, mais si je lance une recherche, j’ai tout les groupes et mots clef concerné par la recherche, du coup plus de groupe que par défaut.

    Comment palier à cela ?

    Répondre à ce message

  • 1

    Avec les derniers verions de sphinx, les dossiers sont sphinxsearch et pas sphinx

    Répondre à ce message

  • 1

    Le fichier
    0_charsets.conf n’est plus bon au niveau du lien

    Répondre à ce message

  • 4

    Bonjour,

    Sauf mécompréhension ou erreur de ma part, je pense avoir trouvé deux bugs dans le squelettes liste_sphinx_facette.html (v2.14.4)

    1. Tag avec apostrophe simple
    Quand une facette tag avec appostrophe simple est choisi pour filtrer les articles, les listes de facettes reviennent vide.
    en effet, l’apostrophe simple est transformé en entité html et le fitre échoue ici :

    {filter (#ENV{tag},    'IN(properties.tags, @valeurs)',    'LENGTH(properties.tags) = 0'}

    je pense qu’en remplaçant
    #ENV{tag} par (#ENV*{tag}|safehtml)
    cela solutionne le problème, mais je ne suis pas sûr des implications en terme de sécurité.

    2. Tag entièrement numérique
    Même problème de facette ne s’affichant pas lorsque un tag est uniquement un nombre.
    Il me semble que le problème viens du fait que le nombre n’est pas mis entre quote dans la requète SQL.

    Bonne journée !

    • NB : l’autre alternative que de remplacer #ENV{tag} par (#ENV*{tag}|safehtml) pourrait être d’insérer les tag échappé grace à entité_html dans la base de donnée sphinx, mais ça casserais probablement la compatibilité avec les indexations actuelles :/

    • Oui mais ce n’est pas qu’un problème de compatibilité. Il est plus logique de sécuriser la communication avec les bons échappements que de bidouiller les données.

      Es-tu sûr qu’on a besoin de |safehtml ?

    • Je t’avoue que je n’ai pas lu le code de l’ensemble du plugin, par acquis de conscience et pour éviter d’éventuelle injection SQL, j’ai mis le |safehtml mais peut-être que tout ça est déjà échappé dans le code.

    • A priori, SPIP s’occupe de la sécurité SQL.

      |safehtml servirait à éviter de renvoyer dans le HTML du javascript qui serait envoyé dans la variable, mais là on ne renvoie pas de HTML donc ça ne joue pas.

      Par ailleurs l’étoile de #ENV*{} ne désactive pas |safehtml, c’est quand on utilise deux étoiles #ENV**{} qu’on désactive vraiment tout :)

      Le cas qui reste est celui des nombres, sphinx demande en effet que les éléments qu’l compare soient du même type (on n’aura jamais 1=="1") donc il faut trouver un moyen de caster.

    Répondre à ce message

  • 3

    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 ?

    • Du coup tu as fait https://zone.spip.org/trac/spip-zone/browser/_plugins_/indexer-groupes-mots pour cela je crois. Une petite doc et un exemple serait bienvenu :)

    • À mon sens il faudrait que le plugin fasse ça « de base », et pas demander d’utiliser un plugin de plugin :)
      Dans l’idéal on aurait simplement à ajouter dans la boucle un { facet groupe…}.

      Actuellement le plugin indexe des tas de hash de façon apparemment bien complète, mais je n’ai pas trouvé de doc (ping @rastapopoulos).

      Je peux travailler là-dessus si j’arrive à comprendre ce que sont censés faire ces hash.

    • Oui, Matthieu, mais j’aimerais lancer le site correspondant avant de documenter.

      Et avant de lancer le site, j’aimerais finir ma thèse :p

    Répondre à ce message

  • 4

    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...)

    • 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 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 ;)

    • 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.

    • 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

  • 5

    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'
            )
    
    )
    • Yep !

      En supprimant date_indexation dans le fichier lib/Indexer/Storage/Sphinx.php de la requête SQL, sphinx c’est soudainement mis à indexer le contenu.

      Cepandant, je dois que ce soit bien, ce champs devrait fonctionner !

    • Il ne faut rien supprimer du tout évidemment. :)

      C’est à priori parce que tu as une vieille installation, une vieille déclaration de la config Sphinx, qui date d’avant l’ajout de ce champ. Dans le plugin, l’exemple de configuration contient bien ce nouveau champ :
      http://zone.spip.org/trac/spip-zone/browser/_plugins_/indexer/trunk/doc/Configuration%20Sphinx.md#L19

      Donc il faut que tu supprimes ta base et que tu la recrées avec ce champ ou bien que tu trouves la commande SphinxQL qui ajoute ce champ sans tout supprimer (il me semble que ça existe mais je ne suis pas sûr).

    • Du coup, c’est l’article de contrib qui n’est pas à jour, car j’ai copié/coller le spip.conf de l’article.

    • Hello,

      Merci pour la modification, mais cela ne correspond pas au fichier sur la zone.

      Sur contrib, il y a ça :

      <?php
              echo _CHARSET_INDEXATION_FR ;
              ?>

      et sur la zone il y a ça :

       morphology = stem_en, libstemmer_fr

      Du coup, c’est quoi le bon ?

    Répondre à ce message

  • 1

    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

    • 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

  • 1

    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.

    • 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…)

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

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

      {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

  • 1

    Est-ce normal que dans

    /Sources/SpipSourcesIndexer.php

    a la ligne 105 on ait cette ligne :

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

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

    Répondre à ce message

  • 1

    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

  • 5

    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.

    • 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.

    • 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 ?

    • 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...

    • 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.

    • 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

  • 2

    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..

    • 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..

    • 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

  • bon je precise qu’il faut aller créer a la main un repertoire /var/lib/sphinx/data/spip/
    avec les droit sphinx:sphinx

    sinon quand on lance #searchd, on a un message d’erreur « WARNING : index ’spip’ : preload : failed to open /var/lib/sphinx/data/spip.lock : No such file or directory ; NOT SERVING
    FATAL : no valid indexes to serve »

    je progresse ;)

    Répondre à ce message

  • 1

    ah aussi je ne vois pas comment sphinx peu se connecter a la base de donne ’spip’ sans qu’on lui indique les informations de connection user/password ...

    • Bonjour

      La configuration proposée utilise 2 spécificités de Sphinx :
      * le mode RT
      * le connecteur Mysql

      Ces 2 particularités cumulées permettent à Sphinx d’exposer une base de donnée d’indexation sphinx nommée spip et publique.

      C’est pourquoi il n’est pas nécessaire dans la configuration de donner ni mot de passe, ni utilisateur.

    Répondre à ce message

  • 1

    bon j’essaye d’installer SPHINX... la documentation est pas ideal pour un debutant comme moi ;)

    J’ai bien réussi a installe SPHINX sur mon serveur mais la configuration c’est un peu plus delicate.
    surtout qu’on dirait que zone.spip.net est offline.

    ca serait bien de rassembler tous les fichiers necessaire sur cette page de contribution.

    • Bonjour

      Les fichiers de configuration pouvant évoluer il est préférable d’avoir les fichiers à jour sur le SVN. En les mettant tous ici on prendrait le risque d’avoir 2 versions à maintenir et le risque d’avoir un fichier faux.

      Contrairement à d’autres contributions cette documentation est là pour expliquer le fonctionnement du plugin Indexer ce qui fait que ces pages peuvent être autonomes.

      Pour la zone c’est corrigé :) Merci pour le signalement. Le serveur et donc le plugin est à nouveau disponible

    Répondre à ce message

  • bon j’ai un peu avance sur mon install et je pense que je suis ok.

    le seul truc que je vois pas trop c’est si je doit créer ma table mysql ’spip’ moi meme ou si le plugin ou le fichier de configuration ’spip.conf’ s’en charge. ce dont je ne n’ai pas l’impression...

    je pense que j’ai besoin de quelques clarifications ;)

    Merci de votre aide.

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

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

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom