Solr-KeywordTokenizerFactory-Coincidencia exacta para varias palabras que no funcionan
solr5 (1)
He hecho la siguiente definición de tipo en Solr:
<fieldType name="text_phrase" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
</analyzer>
</fieldType>
Debe indexar los valores textualmente (sin tokenización).
Agrego el valor "skinny jeans" a mi índice.
Cuando ejecuto la siguiente consulta de búsqueda (URL decodificada para leer) no obtengo ningún resultado :
http://myvm:8983/solr/mycore/select?q=*:*&fq=name:("skinny jeans")&wt=json&indent=true&debugQuery=true
Puede ver que la URL está buscando todo (*: *) con una consulta de filtro para el valor exacto "jeans ajustados".
Luego agrego el valor "jeans" a mi índice, y ejecuto una consulta similar con
&fq=name:("jeans")
Y sí encuentro el elemento "jeans".
Entonces funciona para una sola palabra, pero no para múltiples palabras. ¿Por qué sería esto? Estoy buscando un valor exacto después de todo. Me hace sospechar que KeywordTokenizerFactory está haciendo algo extraño. ¿Alguien puede por favor avisar por qué no se están devolviendo resultados de una configuración tan básica?
Gracias,
Esto se debe a que está utilizando KeywordTokenizerFactory
para la indexación que mantiene la palabra tal como está. No aplica ninguna tokenización o no crea ningún token. Pero mientras consulta, está utilizando WhitespaceTokenizerFactory
que crea tokens para el espacio en blanco.
Entonces KeywordTokenizerFactory
tendrá un token como "skinny jeans"
como único token en el índice.
WhitespaceTokenizerFactory
creará tokens como "skinny", "jeans"
.
Puedes ver la diferencia, no coincidirá. Está buscando "skinny", "jeans"
"skinny jeans"
.
Necesita cambiar el tokenizador de índice o el tokenizador de consulta.
Si desea continuar con la coincidencia exacta, mantenga la KeywordTokenizerFactory
para ambos como en tokenizer mientras indiza y consulta, como se muestra a continuación.
<fieldType name="text_phrase" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
</analyzer>
</fieldType>
Puede verificar el token creado mientras indexa y token creado durante la consulta utilizando la herramienta de análisis de solr.