2012-02-07 13 views
5

He configurado el corrector ortográfico para la configuración de instalación de ejemplo que viene con Solr. He seguido sus instrucciones para el corrector ortográfico aquí: [http://wiki.apache.org/solr/SpellCheckComponent][1]Solr - ejemplo corrector ortográfico no funciona

El problema que tengo es que después de seguirlo exactamente todavía no puedo hacerlo funcionar?

La respuesta cuando construyo (http: // localhost: 8983/Solr/deletrear q = : & spellcheck.build = true & spellcheck.q = delll% 20ultrashar & corrección ortográfica = true)

es el siguiente:

<response> 
    <lst name="responseHeader"> 
     <int name="status">0</int> 
     <int name="QTime">14</int> 
    </lst> 
     <str name="command">build</str> 
     <result name="response" numFound="17" start="0"> 
     ... 
     </result> 
     <lst name="spellcheck"> 
     <lst name="suggestions"/> 
    </lst> 
</response> 

Y cuando me pregunta con http://localhost:8983/solr/spell?q=: & spellcheck.q = delll + ultrashar & corrección ortográfica = true & spellcheck.extendedResults = true

Me da la siguiente respuesta

<response> 
    <lst name="responseHeader"> 
     <int name="status">0</int> 
     <int name="QTime">1</int> 
    </lst> 
    <result name="response" numFound="17" start="0"> 
    ... 
    </result> 
    <lst name="spellcheck"> 
     <lst name="suggestions"> 
     <bool name="correctlySpelled">false</bool> 
     </lst> 
    </lst> 
</response> 

¿qué pasa? ¿Me falta algo en mi schema.xml?

schema.xml está aquí: http://www.developermill.com/schema.xml

El solrConfig.xml está aquí: http://www.developermill.com/solrconfig.xml

El único cambio en los archivos de ejemplo fue la adición de los siguientes en la solrconfig.xml:

<searchComponent name="spellcheck" class="solr.SpellCheckComponent"> 

    <lst name="spellchecker"> 
    <!-- 
     Optional, it is required when more than one spellchecker is configured. 
     Select non-default name with spellcheck.dictionary in request handler. 
    --> 
    <str name="name">default</str> 
    <!-- The classname is optional, defaults to IndexBasedSpellChecker --> 
    <str name="classname">solr.IndexBasedSpellChecker</str> 
    <!-- 
     Load tokens from the following field for spell checking, 
     analyzer for the field's type as defined in schema.xml are used 
    --> 
    <str name="field">spell</str> 
    <!-- Optional, by default use in-memory index (RAMDirectory) --> 
    <str name="spellcheckIndexDir">./spellchecker</str> 
    <!-- Set the accuracy (float) to be used for the suggestions. Default is 0.5 --> 
    <str name="accuracy">0.7</str> 
    <!-- Require terms to occur in 1/100th of 1% of documents in order to be included in the dictionary --> 
    <float name="thresholdTokenFrequency">.0001</float> 
    </lst> 
    <!-- Example of using different distance measure --> 
    <lst name="spellchecker"> 
    <str name="name">jarowinkler</str> 
    <str name="field">lowerfilt</str> 
    <!-- Use a different Distance Measure --> 
    <str name="distanceMeasure">org.apache.lucene.search.spell.JaroWinklerDistance</str> 
    <str name="spellcheckIndexDir">./spellchecker</str> 

    </lst> 

    <!-- This field type's analyzer is used by the QueryConverter to tokenize the value for "q" parameter --> 
    <str name="queryAnalyzerFieldType">textSpell</str> 
</searchComponent> 
<!-- 
    The SpellingQueryConverter to convert raw (CommonParams.Q) queries into tokens. Uses a simple regular expression 
    to strip off field markup, boosts, ranges, etc. but it is not guaranteed to match an exact parse from the query parser. 

Optional, defaults to solr.SpellingQueryConverter 
--> 
<queryConverter name="queryConverter" class="solr.SpellingQueryConverter"/> 

<!-- Add to a RequestHandler 
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
    NOTE: YOU LIKELY DO NOT WANT A SEPARATE REQUEST HANDLER FOR THIS COMPONENT. THIS IS DONE HERE SOLELY FOR 
    THE SIMPLICITY OF THE EXAMPLE. YOU WILL LIKELY WANT TO BIND THE COMPONENT TO THE /select STANDARD REQUEST HANDLER. 
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
--> 
<requestHandler name="/spellCheckCompRH" class="solr.SearchHandler"> 
    <lst name="defaults"> 
    <!-- Optional, must match spell checker's name as defined above, defaults to "default" --> 
    <str name="spellcheck.dictionary">default</str> 
    <!-- omp = Only More Popular --> 
    <str name="spellcheck.onlyMorePopular">false</str> 
    <!-- exr = Extended Results --> 
    <str name="spellcheck.extendedResults">false</str> 
    <!-- The number of suggestions to return --> 
    <str name="spellcheck.count">1</str> 
    </lst> 
    <!-- Add to a RequestHandler 
     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
     REPEAT NOTE: YOU LIKELY DO NOT WANT A SEPARATE REQUEST HANDLER FOR THIS COMPONENT. THIS IS DONE HERE SOLELY FOR 
     THE SIMPLICITY OF THE EXAMPLE. YOU WILL LIKELY WANT TO BIND THE COMPONENT TO THE /select STANDARD REQUEST HANDLER. 
     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
    --> 
    <arr name="last-components"> 
    <str>spellcheck</str> 
    </arr> 
</requestHandler> 
+0

¿Podría pegar aquí las partes relevantes de 'solrconfig.xml' y' schema.xml'? – javanna

+0

Aquí están los enlaces a los dos. El límite de caracteres aquí es poco para pegar. http://www.developermill.com/solrconfig.xml http://www.developermill.com/schema.xml -> El único cambio que hice fue en el archivo solrconfig.xml que comienza con < searchComponent name = "spellcheck" class = "solr.SpellCheckComponent"> justo en la parte inferior –

+0

Noté que el 'solrconfig.xml' vinculado es diferente del que se pegó en su pregunta. Cual estas usando? Quizás deberías mantenerte en la pregunta solo esa. – javanna

Respuesta

2

La definición de campo textSpell está en el lugar incorrecto. El siguiente fragmento debe estar dentro de la etiqueta dentro de la typesschema.xml:

<fieldType name="textSpell" class="solr.TextField" positionIncrementGap="100" omitNorms="true"> 
    <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.StandardFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.StandardFilterFactory"/> 
    </analyzer> 
</fieldType> 

Después de que haya solucionado eso, todo debería funcionar, supongo, pero me gustaría sugerir que le permite trabajar en la limpieza de un poco de su ejemplo, ya que básicamente contiene todo lo que puedes configurar. Debes mantener exactamente lo que realmente necesitas.

+0

Gracias Javanna, corrigí mi documento como indicaste arriba. Ese fue uno de los problemas. Sin embargo, me encontré con otro problema, ¿es que la consulta de compilación no se puede construir? Para resolver esto, tuve que incluir verdadero en mi componente searchComponent. ¿Alguien sabe por qué falla la consulta de compilación? –

+0

¿Ha encontrado algún error dentro de su archivo de registro? Es extraño porque el índice está construido de la misma manera. Lo que has cambiado es el momento en que está construido.Anteriormente se había creado manualmente, en realidad se crea automáticamente después de cada confirmación. – javanna

+0

Gracias, echaré un vistazo a esos ... –

Cuestiones relacionadas