Solr - sinônimos contendo várias palavras
Pergunta rápida, eu não sei como lidar com sinônimos que contém um espaço! Eu tenho a seguinte configuração:
O arquivo de configuração do 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>
Meu arquivo: syn.txt
st., st => saint
istambul => istanbul
airport, apt => aéroport
NYC => New York
pt., pt => port
brussels => bruxelles
Tudo estava funcionando bem, exceto o sinônimo:
"NYC => New York"
Eu fiz algumas pesquisas e encontrei o seguinte:
Tenha em mente que, enquanto o SynonymFilter terá prazer em trabalhar com sinônimos contendo várias palavras (ou seja: "biscoito do mar, biscuit mar, seabiscuit")
A abordagem recomendada para lidar com sinônimos como esse é expandir o sinônimo ao indexar. Isso ocorre porque há dois possíveis problemas que podem ocorrer no momento da consulta:
O Lucene QueryParser tokeniza o espaço em branco antes de fornecer qualquer texto ao Analyzer, portanto, se uma pessoa pesquisar as palavras sea biscit, o analisador receberá as palavras "sea" e "biscit" separadamente e não saberá que elas correspondem a um sinônimo .
Busca por frase (ex: "sea biscit") fará com que o QueryParser passe a string inteira para o analisador, mas se o SynonymFilter estiver configurado para expandir os sinônimos, quando o QueryParser receber a lista resultante de tokens do Analyzer, irá construir um MultiPhraseQuery que não terá o efeito desejado.
Isso ocorre devido ao mecanismo limitado disponível para o Analyzer indicar que dois termos ocupam a mesma posição: não há como indicar que uma "frase" ocupa a mesma posição que um termo.
Para nosso exemplo, a MultiPhraseQuery resultante seria "(sea | sea | seabiscuit) (biscuit | biscit)" que não corresponderia ao caso simples de "seabiscuit" que ocorre em um documento
Então eu tentei mudar o meu arquivo de configuração e adicionar meus filtros na indexação, mas não está funcionando.
Alguma coisa teve algumas idéias?