2012-02-29 7 views
7

que utiliza Solr para mis aplicaciones y i integrado el componente de corrección ortográfica, pero tengo algunos problemas:Solr Por favor, use (Revisar la ortografía de componente)

Primero: Cuando escribo un término separados por el espacio que me dan la corrección para cada término

Ej: "tros wat" =>"qué término" pero la verdad es Watters

Segundo: cuando escribo por lo me frase con un término equivocado. aunque los otros términos son correctos, aplican el hechizo para todos los términos.

por ejemplo, "Difreences en lankuage uso convenciones" "Las diferencias en el uso del lenguaje conversiones" =>.

La verdad es "Las diferencias en el uso de la lengua convenciones"

Ésta es mi config en solrconfig.xml:

<searchComponent name="spellcheck" class="solr.SpellCheckComponent"> 
      <str name="queryAnalyzerFieldType">textSpell</str> 
      <lst name="spellchecker"> 
       <str name="name">default</str> 
       <str name="field">spell</str> 
       <str name="spellcheckIndexDir">spellchecker</str> 
      </lst> 
</searchComponent> 

<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy"> 
      <lst name="defaults"> 
       <str name="spellcheck.onlyMorePopular">true</str> 
       <str name="spellcheck.extendedResults">false</str> 
       <str name="spellcheck.count">1</str> 
      </lst> 
      <arr name="last-components"> 
       <str>spellcheck</str> 
      </arr> 
</requestHandler> 

Schema.xml:

tipo

Campo:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
      <analyzer type="index"> 
       <tokenizer class="solr.StandardTokenizerFactory"/> 
       <filter class="solr.LowerCaseFilterFactory"/> 
       <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" splitOnCaseChange="1"/> 
       <filter class="solr.ASCIIFoldingFilterFactory" /> 
       <filter class="solr.SnowballPorterFilterFactory" language="English"/> 
       <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
      </analyzer> 
      <analyzer type="query"> 
       <tokenizer class="solr.StandardTokenizerFactory"/> 
       <filter class="solr.LowerCaseFilterFactory"/> 
       <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/> 
       <filter class="solr.ASCIIFoldingFilterFactory" /> 
       <filter class="solr.SnowballPorterFilterFactory" language="English"/> 
       <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
      </analyzer> 
      <analyzer type="multiterm" > 
       <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
       <filter class="solr.ASCIIFoldingFilterFactory" /> 
      </analyzer> 
     </fieldType> 


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

campos:

<field name="title" type="text" indexed="true" stored="true" termVectors="true"/> 
<field name="spell" type="textSpell" indexed="true" stored="true" multiValued="true"/> 

copia Campos

<copyField source="title" dest="spell"/> 

Le agradecería su ayuda

Saludos

+0

Buena pregunta ... ¿Tiene algún tutorial que utilizó para aprender más acerca de lucene ... aparte de la documentación oficial de la página de Solr? Ty –

+0

@Sebastian: ** Tutorial básico: ** [Solr en 5 minutos] (http://www.solrtutorial.com/solr-in-5-minutes.html), [Apache Lucene de inicio rápido guía] (http://www.ibm.com/developerworks/opensource/tutorials/os-apachelucene/). ** Tutorial avanzado: ** [Tutorial de Dzone Solr] (http://www.dzone.com/links/search.html?query=solr+lucene&x=-1335&y=-4). Ejemplos **: ** [Solr Drupal para Drupal] (https://drupal.org/project/apachesolr), [Apache Solr para WordPress] (http://wordpress.org/plugins/solr- for-wordpress /), [Solr Php Manual] (http://php.net/manual/fr/book.solr.php). Buena suerte, espero que ayude;) – ZendMind

+0

** Libros: ** [Lucene and Solr: The Definitive Guide] (http://www.amazon.com/Lucene-Solr-Definitive-comprehensive-realtime/dp/1449359957/ref = sr_1_3? s = libros & ie = UTF8 & qid = 1378896499 y sr = 1-3 y palabras clave = Solr), [Apache Solr 4 Cookbook] (http://www.amazon.com/Apache-Solr-Cookbook-Rafal-Kuc/ dp/1782161325/ref = sr_1_1? s = libros & ie = UTF8 & qid = 1378896499 y sr = 1-1 y palabras clave = Solr). – ZendMind

Respuesta

1

Para su primer problema que podría utilizar WordBreakSpellChecker

cuanto a su segunda problema que podría establecer <str name="spellcheck.onlyMorePopular">true</str> a <str name="spellcheck.onlyMorePopular">false</str> y vea si esto tiene el resultado esperado.

+0

Hola Klein, gracias por tu respuesta, estoy usando appach-solr3.5 para interactuar con php. ¿Puedes decirme cómo puedo usar este parche? Cheers – ZendMind

+0

¿WordBreakSpellChecker es estándar en appach-solr3.5? – ZendMind

+0

No es estándar. Debes aplicarlo a la fuente y construir una nueva jar/war. –

Cuestiones relacionadas