Pergunta

Estou tendo problemas ao consultar o Solr usando o seguinte tipo de campo:

<fieldType name="text_ci" class="solr.TextField" positionIncrementGap="100">
   <analyzer>
      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
       <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
   </analyzer>
</fieldType>

Como você pode ver, ele aplica o "SnowballPorterFilterFactory" ao indexar e consultar.Se eu indexar algo como

Coisas de mouse e diversão

Ele é indexado como:

Index Breakdown in Solr

Como você pode ver a palavra "Mouse" foi transformada em "Mous" pelo "SnowballPorterFilterFactory".É isso que queremos.Porém quando procuramos

Rato*

Parece não aplicar o "SnowballPorterFilterFactory" da mesma maneira.Acho que devido ao * no final.

Query Breakdown in Solr

Minha pergunta é..Existe uma maneira de fazer com que o "SnowballPorterFilterFactory" conheça os curingas?Então, quando eu consultar

Rato*

Não obtenho 0 resultados.

Curiosamente, se eu consultar

rato*

O disco volta.

Ou alguém pode oferecer uma maneira melhor de consultar/indexar esse tipo de campo?

Obrigado Dave

Foi útil?

Solução

De Perguntas frequentes:

Ao contrário de outros tipos de consultas Lucene, as consultas Wildcard, Prefix e Fuzzy não são passadas pelo Analisador, que é o componente que executa operações como lematização e letras minúsculas.A razão para pular o Analisador é que se você estivesse procurando por "cachorros*", você não iria querer que "cachorros" fosse primeiro derivado de "cachorro", pois isso corresponderia a "cachorro*", que não é a consulta pretendida.De qualquer forma, essas consultas não diferenciam maiúsculas de minúsculas porque QueryParser as torna minúsculas.Este comportamento pode ser alterado usando o método setLowercaseExpandedTerms(boolean)

Se você concordar em alterar sua fonte Solr, SOLR-757 tem um patch anexado que pode ser útil.Não conheço outra maneira de mudar isso a não ser mergulhar na fonte.

O que pode ser uma ideia mais simples:basta ter um campo de cópia que não tenha origem.O usuário pode pesquisar esses dois campos e, em seguida, mouse* corresponderá ao campo sem radical.

(EDITAR:na verdade, olhando para esse patch, não tenho certeza se ele fará o que você deseja.Mas basicamente você só precisa alterar seu manipulador de consulta para originar primeiro.)

Outras dicas

Da última vez que verifiquei, quando você usa curingas, o analisador de consulta não é usado.Portanto, como você está usando um LowerCaseFilterFactory, seus termos são indexados em letras minúsculas e a pesquisa por Mous* não retornará nada.

Acho que a única coisa a fazer quando você usa curingas é adaptar sua consulta à forma como seus termos são indexados (de maneira semelhante ao que seu analisador de consulta faria).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top