Frase múltiples consultas no encontrar mis documentos

Pregunta hecha: hace 8 meses Ultima actividad: hace 8 meses
up 1 down

Como parte de un plan de actualización de la versión 6.2.1, Soy la creación de un nuevo Solr (7.6.0). Sorprendentemente, una de nuestras pruebas simples fallidos - insertar un documento con un texto y luego tratar de buscarlo.

El texto que se ha introducido es:

Voy a pensar en ello.

Solicitud configuración handler:

<requestHandler name="/select" class="solr.SearchHandler">    
     <lst name="defaults">
       <str name="echoParams">explicit</str>
       <int name="rows">20</int>
       <str name="df">text_en</str>
       <str name="hl.fragsize">100000</str>
       <str name="hl.maxAnalyzedChars">100000</str>
     </lst>
</requestHandler>

Se trata de cómo se configura el campo:

<field name="text_en" type="text_en" indexed="true" stored="true" multiValued="true" />


<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.CommonGramsFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true"  words="lang/stopwords_en.txt"/>
    <filter class="solr.EnglishPossessiveFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.CommonGramsFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true"  words="lang/stopwords_en.txt"/>
    <filter class="solr.EnglishPossessiveFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
  </analyzer>
</fieldType>

"Voluntad" y "" aparece en el archivo stopwords_en.txt.

Según el análisis de la aplicación web de administración, esas son las fichas finales que se insertan en el índice:

text:     i i_will will_think think about about_it  
position: 1    1       2        3     4      4

Buscar text_en:"I will think about it" no encuentra el documento.

Lo extraño es que la consulta "I will think think about it" funciona...

Usando debugQuery, he notado una diferencia en comparación con nuestra versión actual.
6.2.1 es usando MultiPhraseQuery
7.6.0 es usando SpanNearQuery

En la versión 6.2.1:

"rawquerystring":"text_en:\"I will think about it\"",
    "querystring":"text_en:\"I will think about it\"",
    "parsedquery":"MultiPhraseQuery(text_en:\"(i i_will) will_think think (about about_it)\")", ...

En 7.6.0 (por cierto, también en 7.5.0):

"rawquerystring":"text_en:\"I will think about it\"",
    "querystring":"text_en:\"I will think about it\"",
    "parsedquery":"SpanNearQuery(spanNear([spanOr([spanNear([text_en:i, text_en:will_think], 0, true), spanNear([text_en:i_will, text_en:think], 0, true)]), text_en:about_it], 0, true))", ...

1 respuesta

up 0 down accepted

He encontrado el culpable.
Compartiéndolo para apoyar a los empleados de Google en el futuro.
Hubo un error en la configuración del campo en el archivo schema.xml.
En el analizador "de consulta", en lugar de "CommonGramsFilterFactory", debe ser "CommonGramsQueryFilterFactory".