2011-06-03 2 views
0

J'utilise SnowballPorterFilterFactory pour les analyseurs d'index et de requêtes. Rechercher le mot "pomme". Solr trouve avec succès les articles nécessaires, mais tels que le mot était épelé incorrect et donne une suggestion: "appl". Cela fonctionne correctement si je recherche des "pommes": aucune suggestion n'est donnée et trouvé des articles avec le mot "pomme".Le filtre Solr SnowballPorterFilterFactory fournit des sugestions incorrectes

schema.xml:

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt" enablePositionIncrements="true"/> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords_en.txt"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms_en.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt" enablePositionIncrements="true"/> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords_en.txt"/> 
    </analyzer> 
</fieldType> 

Toute idée comment exclure des suggestions erronées?

Répondre

2

Vous ne devez pas utiliser le même champ pour la recherche & correction orthographique ... Ajouter un champ sans racine pour vérifier l'orthographe.

Exemple:

<!-- Basic Text Field for use with Spell Correction --> 
<fieldType name="textSpell" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.ASCIIFoldingFilterFactory"/> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" preserveOriginal="1"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
    </analyzer> 
</fieldType> 

<!-- TextSpell --> 
<field name="textSpelling" type="textSpell" indexed="true" stored="false" multiValued="true"/> 

Puis dans votre solrconfig.xml:

<searchComponent name="spellcheck" class="solr.SpellCheckComponent"> 
    <lst name="spellchecker"> 
     <str name="name">default</str> 
     <str name="field">textSpelling</str> 
     <str name="termSourceField">textSpelling</str> 
     <str name="accuracy">0.7</str> 
     <str name="spellcheckIndexDir">./spellchecker</str> 
     <str name="queryAnalyzerFieldType">text</str> 
     <str name="buildOnOptimize">true</str> 
    </lst> 
</searchComponent> 
Questions connexes