• [^] # Re: Compliqué ?

    Posté par (site web personnel) . En réponse au journal Activer Elasticsearch pour son instance Mastodon. Évalué à 2. Dernière modification le 30 août 2023 à 04:25.

    Solr permet de contrôler la manière dont est créé l'index, et de traiter la requête de la même façon. On peut le faire en Postgres, il n'est pas nécessaire d'utiliser unaccent, il suffit d'ajouter une colonne et de mettre une copie sans accents, c'est d'ailleurs ce qui est pratiqué avec Solr. Pour cet usage précis, Solr permet de créer automatiquement les copies (tu pourrais aussi le faire avec une procédure stockée à Postgres... Bref, c'est juste pas pratique).

    Finalement, on pourrait aussi tout faire en C (ou en C++ ou en Rust.. mais pas en Python, pitié, ni en JS/TypeScript...) ... Avec des indexes aux petits oignons, en fonction du type de chaîne de caractères (référence produit, argot, adresse postale, adresse mail), c'est juste que Solr a pensé a tous les cas d'usage, et que c'est pas trop long a maîtriser, comme l’auto-complétion et le faceting.

    Un exemple de configuration pour comprendre la manière dont sont traitées les chaînes de caractères avec Solr pour les textes anglais :

     <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
     <analyzer type="index">
     <tokenizer class="solr.StandardTokenizerFactory"/>
     <filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
     <filter class="solr.LowerCaseFilterFactory"/>
     <filter class="solr.EnglishPossessiveFilterFactory"/>
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
     <filter class="solr.PorterStemFilterFactory"/>
     </analyzer>
     <analyzer type="query">
     <tokenizer class="solr.StandardTokenizerFactory"/>
     <filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
     <filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
     <filter class="solr.LowerCaseFilterFactory"/>
     <filter class="solr.EnglishPossessiveFilterFactory"/>
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
     <filter class="solr.PorterStemFilterFactory"/>
     </analyzer>
     </fieldType>

    On voit la partie index et query, ça fait bien plus que unaccent, juste pour ce cas simple.

    P.S.: J'ai lu plus bas qu'ElasticSearch n'était pas OpenSource, je n'utilise que Solr sur nos instances (voir le site de taack.org et taper JDBC par exemple dans le moteur de recherche..).