Solr Snowball Stemmer es inconsistente con el español
-
28-10-2019 - |
Pregunta
Tengo este campo de tallo:
<fieldtype name="textes" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords-es.txt" enablePositionIncrements="true"/>
<filter class="solr.SnowballPorterFilterFactory" language="Spanish" protected="protwords-es.txt"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
<filter class="solr.SnowballPorterFilterFactory" language="Spanish" protected="protwords-es.txt"/>
</analyzer>
</fieldtype>
El resultado esperado de la consulta de búsqueda alquileres
(alquileres) sería un partido de alquiler
(renta). Pero cuando voy a "análisis de campo" en el sitio de administración de Solr, y verifique un valor de índice de alquiler
y un valor de consulta de alquileres
, lo siguiente sucede:
- Al indexar
alquiler
, se detiene enalquil
. - Al consultar
alquileres
, se detiene enalquiler
.
Entonces, el simple caso de buscar la forma plural de una palabra (alquileres
) no coincidiría con su forma singular (alquiler
).
No deberían tanto el índice como la consulta en el mismo tallo (ya sea alquiler
o alquil
)? ¿Es esto una limitación del algoritmo o un malentendido/configuración errónea de mi parte?
Solución
Snowball Stemming es muy limitado ... obtendrías un mejor resultado al usar un diccionario (Hunspell Stemmer): http://wiki.apache.org/solr/hunspell
Otros consejos
Este enlace funciona correctamente para alquilares
Utilizo Hunspell de OpenOffice y hace un trabajo excelente.
Mi ejemplo:
URL-Elastic/_analyze?analyzer=es_AR&text=alquileres
Y volver:
{
tokens:
[
{
token: "alquiler",
start_offset: 0,
end_offset: 10,
type: "<ALPHANUM>",
position: 1
}
]
}