La recherche fulltext de termes avec '-' (hyphen/dash) ne fonctionne pas bien sur MySQL

Bonjour François,

Merci beaucoup pour ton retour.

Le contournement appliqué dans notre contexte spécifique MySQL est pour l’instant déployé et fonctionnel tel que avec ses avantages et ses défauts.

J’ai commencé à tester les modalités de recherches fulltext offertes par PostGreSQL (qui est la brique SGBD déployée en standard dans nos architectures) et il y a là aussi des subtilités que je commence à fouiller (source : PostgreSQL: Documentation: 15: 12.3. Controlling Text Search).

En particulier, je vois dans la documentation et en testant que l’opérateur ‘-’ n’est pas supporté/interprété par la couche tsquery mais que la fonction websearch_to_tsquery le supporte (de manière simplifiée telle que je le comprends, en substituant ‘-’ par ‘!’).

En testant, j’ai l’impression que la recherche globale Simplicité traite correctement la négation de terme avec ‘!’ mais ignore l’opérateur ‘-’. Ce qui semble indiquer que de manière sous-jacente le runtime “pousse” les termes saisis par l’utilisateur en tant que tsquery et n’exploite pas le service proposé de traduction websearch_to_tsquery… Pour autant, si je saisi des termes en mode tsquery ça ne ramène plus rien…

  • +service +nissan +dacia -etude ramène ce qui est indexé avec service, nissan et dacia mais ramène aussi les études (le ‘-’ est ignoré)
  • +service +nissan +dacia !etude ramène ce qui est indexé avec service, nissan et dacia mais pas les études (ce qui est attendu)
  • 'service' & 'nissan' & 'dacia' & !'etude' (search en mode tsquery natif) ne ramène rien

J’ai donc l’impression que nous sommes entre les deux modes websearch (très simple et accessible) et tsquery (très puissant et formel).
→ Simplicité fait-il quelque-chose sur les termes avant de les pousser à PostGreSQL ?

Autre différence de comportement, avec PostGreSQL, il semble que l’opérateur ‘*’ ne soit pas nécessaire pour étendre les termes (gloss* pour couvrir gloss, glossary, glossaire, etc…). Le fait de mettre ‘*’ ou pas est traité de manière apparemment identique.

1 Like