Bonjour,
Je me demandais juste si j’étais un cas isolé ou s’il y a vraiment un soucis. J’ai testé en local et sur un mutu 1and1.
Spip 2.1 + fulltext +MyISAM + utf8 general_ci sur les tables et la base.
Sans opérateur ou " ", le fulltext ne renvoit pas de résultats que j’arrive à comprendre.
Exemple :
Dans les 2 brèves du site, j’en ai une avec en titre Artistik Africa. Si je cherche Africa (ou artistik), il me sort plusieurs objets le contenant mais pas la brève (artistik ne renvoit rien, c’est un mot qui est uniquement contenu dans cette brève). Je n’ai pas de jointures particulières ou quoi, c’est pourtant relativement standard. Si je chercher +Africa ou « Africa », il me sort bien la brève. Donc BOOLEAN MODE obligatoire ?
J’ai uniquement créer l’index fulttext sur tout et pas sur titre+tout (mais j’ai testé les 2 configurations, c’est similaire).
Voilà le contenu de prive_recherche.log (j’ai activé le log dans recherche.php)
Voilà le résultat avec la recherche Africa (résultat incohérent)
May 07 10:30:01 MONIP (pid 2646) fulltext breve: tout
May 07 10:30:01 MONIP (pid 2646) (MATCH(t.titre,t.texte,t.lien_titre,t.lien_url) AGAINST (‹ Africa ›)) * 1.5 AS score
May 07 10:30:01 MONIP (pid 2646) array (
‹ SELECT › =>
array (
0 => ‹ t.id_breve ›,
1 => ‹ (MATCH(t.titre,t.texte,t.lien_titre,t.lien_url) AGAINST (‹ Africa ›)) * 1.5 AS score ›,
),
‹ FROM › =>
array (
0 => ‹ spip_breves AS t ›,
),
‹ WHERE › =>
array (
),
‹ GROUPBY › =>
array (
0 => ‹ t.id_breve ›,
),
‹ ORDERBY › => ‹ score DESC ›,
‹ LIMIT › => ‹ 0,500 ›,
‹ HAVING › => ‹ ›,
)
May 07 10:30:01 87.90.22.225 (pid 2646) recherche breve (Africa) : 0 resultats 2.135 ms
Voilà le résultat avec « Africa » (résultat cohérent)
May 07 10:48:32 MONIP(pid 15224) recherche breve (« Africa ») : 1 resultats 7.778 ms
May 07 10:48:32 MONIP(pid 15224) fulltext rubrique: tout
May 07 10:48:32 MONIP(pid 15224) fulltext mot: tout
May 07 10:48:32 MONIP(pid 15224) fulltext document: tout
May 07 10:48:32 MONIP(pid 15224) MATCH(t.titre,t.descriptif,t.texte) AGAINST (’« Africa »’ IN BOOLEAN MODE) * 1.8 + SUM(MATCH(obj6.titre,obj6.texte,obj6.descriptif) AGAINST (’« Africa »’ IN BOOLEAN MODE)) + SUM(MATCH(obj7.titre,obj7.descriptif,obj7.contenu) AGAINST (’« Africa »’ IN BOOLEAN MODE)) AS score
May 07 10:48:32 MONIP(pid 15224) array (
‹ SELECT › =>
array (
0 => ‹ t.id_rubrique ›,
1 => ‹ MATCH(t.titre,t.descriptif,t.texte) AGAINST ( ›\« Africa\ »’ IN BOOLEAN MODE) * 1.8 + SUM(MATCH(obj6.titre,obj6.texte,obj6.descriptif) AGAINST (’\« Africa\ »’ IN BOOLEAN MODE)) + SUM(MATCH(obj7.titre,obj7.descriptif,obj7.contenu) AGAINST (’\« Africa\ »’ IN BOOLEAN MODE)) AS score’,
),
‹ FROM › =>
array (
0 => 'spip_rubriques AS t
LEFT JOIN spip_mots_rubriques as lien6 ON lien6.id_rubrique=t.id_rubrique
LEFT JOIN spip_mots AS obj6 ON lien6.id_mot=obj6.id_mot
LEFT JOIN spip_documents_liens AS lien7 ON (lien7.id_objet=t.id_rubrique AND lien7.objet=‹ rubrique ›)
LEFT JOIN spip_documents AS obj7 ON lien7.id_document=obj7.id_document
',
),
‹ WHERE › =>
array (
),
‹ GROUPBY › =>
array (
0 => ‹ t.id_rubrique ›,
),
‹ ORDERBY › => ‹ score DESC ›,
‹ LIMIT › => ‹ 0,500 ›,
‹ HAVING › => ‹ ›,
)
Si quelqu’un à la moindre idée, je suis super preneur.
Ps : en modifiant la ligne 268
$val = « MATCH($key) AGAINST ($p) »;
pour
$val = « MATCH($key) AGAINST ($p IN BOOLEAN MODE) »;
ben oui, ça marche. Mais bon, pas sensé utilisé le BOOLEAN MODE par défaut ?