2010-11-01 3 views
1

J'ai implémenté le correcteur orthographique basé sur le fieldType donné ici: http://wiki.apache.org/solr/SpellCheckingAnalysis La correction orthographique est à faire pour les noms de fournisseurs où des suggestions doivent être données en relation avec le terme recherché. J'ai utilisé copyField pour le champ vendorName du type ci-dessus, c'est-à-dire textSpell Je reçois des résultats assemblés bizarres pour certaines de mes requêtes. par exemple. 1) maccys ne me donne aucun résultat où maccy me donne le résultat désiré, c'est-à-dire macy's. J'ai comparé l'analyse de texte (outil d'administration) fait pour maccys & maccy en utilisant à la fois le texte & textSpell fieldtypes et les deux donnent macy comme endresult. Alors pourquoi n'y a-t-il aucun résultat renvoyé par le correcteur d'orthographe?solr spellchecker

2) khols me donne des «chaussures» le résultat colligé où le résultat correct «kohls» est la troisième suggestion après (chaussures & magasins).

Le drapeau onlyMorePopular est faux et la précision est la valeur par défaut de 0,5

Merci d'avance pour toute aide. Je suis un peu perdu en termes de débogage.

Répondre

2

Nous avons rencontré les mêmes problèmes pour l'orthographe qui produisait des résultats bizarres, bien que nous disposions de beaucoup de données. Je ne peux pas aider comment déboguer mieux, mais je peux vous dire ce que nous avons fait:

  1. nous utilisons un champ de texte tel qu'il est - pas d'espace ou tokenizer standard! vous pouvez également ajouter un filtre à bardeaux si vous avez moins de données à l'index non seulement « bonjour lapin » mais aussi « lapin bonjour », mais cela va exploser l'indice spellcheck encore plus

    <fieldType name="txtspell" class="solr.TextField" positionIncrementGap="100" omitNorms="true"> 
        <analyzer> 
         <tokenizer class="solr.KeywordTokenizerFactory"/> 
         <filter class="solr.LowerCaseFilterFactory"/> 
         <filter class="solr.TrimFilterFactory" /> 
         <filter class="solr.PatternReplaceFilterFactory" 
         pattern="[\-\.\/\(\),]" replacement="" replace="all"/> 
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="spellstopwords.txt"/>      
         <!-- we don't want duplicates for one doc --> 
         <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
        </analyzer> 
    </fieldType> 
    
  2. si vous avez vraiment besoin collation alors (si vous n'utilisez pas le filtre de bardeaux, vous en aurez besoin) vous pouvez utiliser solr du tronc où vous pouvez spécifier maxCollationTries = 1 pour être sûr que la correction retournée produirait quelques hits

  3. nous utilisons spellcheck.accuracy = 0,7 (et onlyMorePopular = false)