2011-03-12 7 views
6

Agrego al índice de solr: "americano". Cuando busco por "América" ​​no hay resultados.¿Cómo configurar derivaciones en Solr?

¿Cómo se debería configurar schema.xml para obtener resultados?

configuración actual:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
      <analyzer type="index"> 
       <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
       <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" /> 
       <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
       <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" /> 
       <filter class="solr.LowerCaseFilterFactory" /> 
       <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" /> 
       <filter class="solr.RemoveDuplicatesTokenFilterFactory" /> 
       <filter class="solr.PorterStemFilterFactory"/> 
      </analyzer> 
      <analyzer type="query"> 
       <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
       <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" /> 
       <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
       <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" /> 
       <filter class="solr.LowerCaseFilterFactory" /> 
       <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" /> 
       <filter class="solr.RemoveDuplicatesTokenFilterFactory" /> 
       <filter class="solr.PorterStemFilterFactory"/> 
      </analyzer> 
     </fieldType> 

Respuesta

4

¿Por qué tiene dos lematizadores?
Intente eliminar EnglishPorterFilterFactory (obsoleto) de sus dos tipos de analizador, reconstruya el índice y luego intente si la búsqueda de estadounidense dará América.

Si eso no funciona, la otra cosa que puede intentar es eliminar sus dos filtros de lemas y agregar SnowballPorterFilterFactory con language="English" en su lugar.

+0

Trató ambos enfoques. Lo mismo. – user657009

+0

índice: "Ranuras" \t Hay resultados cuando busco por: "Ranuras", "Ranura", "Ranura". índice: "Estadounidense" \t No hay resultados para "American". – user657009

+3

Lo primero que debe hacer es abrir la aplicación web de administración Solr, vaya a Análisis y elija su tipo/nombre de campo (marque ambos campos de salida detallados), escriba Americano en el campo Índice y América en el campo Consulta. Esto le permitirá ver cómo se analiza exactamente, filtro por filtro. Para un análisis más detallado, descargue [Luke] (http://www.getopt.org/luke/luke-0.9.9/lukeall-0.9.9.jar) si aún no lo tiene (es el archivo ejecutable). Comience y cargue el índice de Lucene. Úselo para descubrir cómo se detuvo su contenido y mucha más información útil ... –

0

Tiene que usar una lematizadora para analyzer y EnglishPorterFilterFactory está en desuso como @Marko ya se ha mencionado. Por lo tanto, debe eliminar este de los analizadores.

que utilizan SnowballPorterFilterFactory para ambos analizadores de índice y consulta -

<fieldType name="text_stem"> 
    <analyzer> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.SnowballPorterFilterFactory"/> 
     <!-- other filters --> 
    </analyzer> 
</fieldType> 

La definición FieldType es bastante explica por sí mismo, pero por si acaso:

  • Tokenizer solr.WhitespaceTokenizerFactory: Esta operación dividirá las oraciones en palabras, utilizando espacios en blanco como delimitadores.

  • Filtro sol.SnowballPorterFilterFactory: Este filtro aplicará un algoritmo de tallado a cada palabra (token). En el ejemplo anterior, he elegido el algoritmo de derivación Snowball Porter. Solr proporciona algunas implementaciones de algoritmos de derivación populares.

Puede buscar otros algoritmos de tallo, p. HunspellStemFilterFactory, KStemFilterFactory también.