Pregunta rápida, no sé cómo tratar con sinónimos que contiene un espacio! que tienen la siguiente configuración:Solr - sinónimos que contienen varias palabras
El archivo de configuración SOLR
<fieldType ... >
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory"
catenateWords="1"
preserveOriginal="1"
splitOnCaseChange="1"
generateWordParts="1"
generateNumberParts="1"
catenateNumbers="1"
catenateAll="1"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="30" side="front"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LengthFilterFactory" min="2" max="70" />
<filter class="solr.SynonymFilterFactory" synonyms="syn.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
Mi archivo: syn.txt
st., st => saint
istambul => istanbul
airport, apt => aéroport
NYC => New York
pt., pt => port
brussels => bruxelles
Todo estaba funcionando bien, excepto el sinónimo:
"NYC => New York"
Investigué un poco y encontré lo siguiente:
Tenga en cuenta que si bien la SynonymFilter estará feliz de trabajar con los sinónimos que contienen varias palabras (es decir: "galleta de mar, Biscit mar, Seabiscuit")
El método recomendado para tratar con sinónimos como este, es ampliar el sinónimo al indexar Esto se debe a que hay dos problemas potenciales que pueden surgir en el tiempo de consulta:
Lucene QueryParser hace tokens en el espacio en blanco antes de dar cualquier texto al analizador, por lo que si una persona busca las palabras sea biscit el analizador recibirá el las palabras "mar" y "biscit" por separado, y no sabrán que coinciden con un sinónimo.
La búsqueda de frases (es decir: "sea biscit") hará que QueryParser pase la cadena completa al analizador, pero si el filtro de sinónimos está configurado para expandir los sinónimos, cuando QueryParser recupera la lista de tokens resultante el Analizador, construirá una MultiPhraseQuery que no tendrá el efecto deseado.
Esto se debe al mecanismo limitado disponible para que el Analizador indique que dos términos ocupan la misma posición: no hay forma de indicar que una "frase" ocupa la misma posición que un término.
Para nuestro ejemplo el MultiPhraseQuery resultante sería "(mar | mar | Seabiscuit) (galleta | Biscit)", que no se correspondería con el simple caso de "Seabiscuit" que ocurren en un documento
Así que probé para cambiar mi archivo de configuración y agregar mis filtros en la indexación, pero no está funcionando.
¿Algo tiene algunas ideas?
Tenga cuidado con este problema en Solr con sinónimos multiword: http://www.opensourceconnections.com/blog/2013/10/27/why-is-multi-term-synonyms-so-hard-in-solr/ –