2016-11-07 4 views
0

Ich versuche, eine Rechtschreibprüfung in Solr zu machen, und ich habe ein Problem mit Fall. Das Problem besteht darin, dass sich der Fall der Abfrage nicht auf die Anzahl der zurückgegebenen Ergebnisse auswirkt, sondern die Ergebnisse der Rechtschreibprüfung ändert. Zum Beispiel, wenn ich 'leave' tippe, bekomme ich 7 Dokumente und keine Rechtschreibprüfung. Aber wenn ich ‚Leave‘ suchen dann bekomme ich noch 7 Ergebnisse Dokument aber jetzt hat diese Rechtschreibprüfung Ergebnisse:Solr Kleinbuchstabenfilter

"spellcheck":{ 
"suggestions":[ 
    "Leave",{ 
    "numFound":3, 
    "startOffset":0, 
    "endOffset":5, 
    "origFreq":0, 
    "suggestion":[{ 
     "word":"leave", 
     "freq":7}, 
     { 
     "word":"lease", 
     "freq":4}, 
     { 
     "word":"travel", 
     "freq":2}]}], 
"correctlySpelled":true, 
"collations":[ 
    "collation",{ 
    "collationQuery":"leave", 
    "hits":7, 
    "misspellingsAndCorrections":[ 
     "Leave","leave"]}]} 

Vorschlagen kleines ‚verlassen‘. Beachten Sie, dass es immer noch korrekt geschrieben ist. Hier ist die Felder und Feldtypen von meinem schema.xml:

<field name="title"   type="text_en" indexed="true" stored="true" multiValued="false" /> 
<field name="filename"  type="string" indexed="true" stored="true" multiValued="false" /> 
<field name="filext"  type="string" indexed="true" stored="true" multiValued="false" /> 
<field name="version"  type="int"  indexed="false" stored="true" multiValued="false" /> 
<field name="docSet"  type="string" indexed="true" stored="true" multiValued="false" /> 
<field name="businessArea" type="string" indexed="true" stored="true" multiValued="false" /> 
<field name="processGroup" type="string" indexed="true" stored="true" multiValued="false" /> 
<field name="applicability" type="string" indexed="true" stored="true" multiValued="true" /> 
<field name="content"  type="text_en" indexed="true" stored="true" multiValued="false" /> 
<field name="lastIndex"  type="int"  indexed="true" stored="true" multiValued="false" /> 
<field name="popularity" type="int"  indexed="true" stored="true" multiValued="false" default="1"/> 

<field name="speller" type="speller_type" indexed="true" stored="true" multiValued="true" /> 

<copyField source="*" dest="speller"/> 

<fieldType name="speller_type" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords_en.txt"/> 
    </analyzer> 

    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords_en.txt"/> 
    </analyzer> 
</fieldType> 

Und das ist die spellchecking Teile meines solrconfig.xml:

<requestHandler name="/select" class="solr.SearchHandler"> 
    <lst name="defaults"> 

    ... 

    <!--**************************************************************** 
    * Spellcheck configuration 
    *****************************************************************--> 
    <str name="spellcheck">on</str> 
    <!-- Suggestions --> 
    <str name="spellcheck.count">10</str> 
    <!-- <str name="spellcheck.maxResultsForSuggest">10</str> --> 
    <str name="spellcheck.extendedResults">true</str> 
    <!-- Collations --> 
    <str name="spellcheck.collate">true</str> 
    <str name="spellcheck.maxCollationTries">5</str> 
    <str name="spellcheck.collateExtendedResults">true</str> 
    <str name="spellcheck.collateMaxCollectDocs">0</str> 

    ... 

    </lst> 

    <arr name="last-components"> 
    <str>spellcheck</str> 
    </arr> 
</requestHandler> 


<searchComponent name="spellcheck" class="solr.SpellCheckComponent"> 
    <lst name="spellchecker"> 
     <str name="classname">solr.IndexBasedSpellChecker</str> 
     <str name="spellcheckIndexDir">./spellchecker</str> 
     <str name="field">speller</str> 
     <str name="buildOnCommit">true</str> 
    </lst> 
</searchComponent> 

Wenn ich einen Kleinfilter mit dem Speller Anwendung Feld warum würde dann die Änderung der Groß-/Kleinschreibung während der Suche die Ergebnisse der Rechtschreibprüfung ändern? Ich habe nach Lösungen gesucht, kann aber nichts finden, was das Problem gelöst hat.

Danke für jede Hilfe.

EDIT: Ich bekomme das gleiche Problem mit Stoppwörter, sie werden nicht angewendet. Auch wenn "for" ein Stopword in stopwords.txt ist und ich mich auf den fieldType des Rechtschreibprogramms bewerbe, würde ich "leave for application" als eine Sortierfolge-Abfrage vorschlagen. Warum werden die Stoppwörter nicht entfernt?

Antwort

0

In Ordnung, ich habe es behoben. Ich änderte den Index basiert checker in der solr Config der direkten ein und jetzt funktioniert alles einwandfrei, dh diese

<str name="classname">solr.IndexBasedSpellChecker</str> 
<str name="spellcheckIndexDir">./spellchecker</str> 
geändert

Um dies:

<str name="classname">solr.DirectSolrSpellChecker</str> 

nicht sicher, warum der Index ein ignoriert der Filter basiert, Ich muss in die Dokumentation schauen.

Verwandte Themen