Partage
  • Partager sur Facebook
  • Partager sur Twitter

Configuration moteur de recherche SOLR Suggester

    21 septembre 2015 à 10:55:22

    Bonjour,

    A la suite de la création de mon site web, je souhaiterai implanter Solr comme moteur de recherche.

    Cependant je me confronte à un problème : Comment obtenir des suggestions à partir de données données par l'utilisateur. Par exemple l'utilisateur indique "énirgie" et le moteur propose "énergie", ou il indique "fran" et le moteur propose "france", tout cela à partir d'informations dans une base de données.

    Voici ma configuration actuelle :

    - Dans schema.xml

    		<fieldType name="textspell_fr" class="solr.TextField" positionIncrementGap="100">
    			<analyzer>
    				<!-- suppression d'éventuelles balises HTML-->
    				<charFilter class="solr.HTMLStripCharFilterFactory"/>
    				<!-- découpage selon les espaces -->
    				<tokenizer class="solr.WhitespaceTokenizerFactory"/>
    				<!-- suppression de la ponctuation -->
    				<filter class="solr.PatternReplaceFilterFactory" pattern="^(\p{Punct}*)(.*?)(\p{Punct}*)$" replacement="$2"/>
    				<!-- passage en minuscules -->
    				<filter class="solr.LowerCaseFilterFactory"/>
    				<!-- suppression des élisions (l', qu',...) -->
    				<filter class="solr.ElisionFilterFactory" articles="contractions.txt"/>
    				<!-- limitation de la longueur des mots -->
    				<filter class="solr.LengthFilterFactory" min="3" max="20" />
    				<!-- suppression des mots insignifiants -->
    				<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
    				<!-- suppression des doublons éventuels -->
    				<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    			</analyzer>
    		</fieldType>
    	<dynamicField name="*_suggest"  type="textspell_fr" indexed="true" stored="true"/>


    - Dans solrconfig.xml

    <searchComponent name="suggest" class="solr.SuggestComponent">
     <lst name="suggester">
     <str name="name">mySuggester</str>
     <str name="lookupImpl">FuzzyLookupFactory</str>
     <str name="dictionaryImpl">DocumentDictionaryFactory</str>
     <str name="field">suggest</str>
     <str name="weightField">price</str>
     <str name="suggestAnalyzerFieldType">string</str>
     <str name="buildOnStartup">false</str>
     </lst>
    </searchComponent>
    
    
    <requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
     <lst name="defaults">
     <str name="suggest">true</str>
     <str name="suggest.count">10</str>
     </lst>
     <arr name="components">
     <str>suggest</str>
     </arr>
    </requestHandler>

    Dans db-data-config.xml. Je charge par une requête SQL :

    					<field column="nom_pays" name="pays_t" />
    					<field column="nom_pays" name="pays_suggest" />

    Pays_t s'affiche parfaitement. Cependant pays_suggest ne s'affiche absolument pas... Je ne comprends pas l'origine du problème.

    En espérant votre aide


    • Partager sur Facebook
    • Partager sur Twitter
      23 septembre 2015 à 14:49:53

      Bonjour,

      Ton problème semble lié à l'indexation avec DIH plutôt que la partie suggester puisque ton champ pays_suggest est vide, c'est bien ça ?
      Dans la configuration de DIH, tu devrais laisser ta 1ère ligne :  

      <field column="nom_pays" name="pays_t" />



      Et faire dans le schema.xml un copyfield de pays_t vers pays_suggest :

      <copyField source="pays_t" dest="pays_suggest" />

      De cette façon ton champ pays_suggest sera bien rempli.

      En voyant la config du Serachcomponent que tu as indiquée, il faut également changer la ligne

      <str name="field">suggest</str>

      par ton nouveau field : pays_suggest




      • Partager sur Facebook
      • Partager sur Twitter
      moteur de recherche open source pour entreprise : www.datafari.com
        24 septembre 2015 à 13:34:07

        Bonjour,

        J'ai déjà tenté un copyfield mais malheureusement cela n'a rien changé, idem pour pays_suggest.

        Par ailleurs, si il faut rentrer autant de données fixes, cela devient moins intéressant vu mon nombre de champs et le nombre de recherches différentes. Par ailleurs java et xml ne sont pas du tout mes points forts ^^.

        Je vais tenter de créer une version "simple" pour faire des recherches plus dynamiques en php/sql avec cache :). Si tu as des idées/tutos pour cela, je suis preneur :). Idem si tu as des idées sur un petit algo pour pouvoir avoir une suggestion en cas d'erreur de frappe :)

        Merci en tout cas pour ton aide :)

        • Partager sur Facebook
        • Partager sur Twitter

        Configuration moteur de recherche SOLR Suggester

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown