tutorial start solr

tutorial - solr start



¿Por qué falla este simple intento de resaltado de Solr? (1)

La forma en que estás resaltando parece buena, pero tu solrconfig.xml parece un poco desordenado. Lamentablemente, el ejemplo que tomaste usa básicamente todas las opciones disponibles, y supongo que no las necesitas. A menos que necesite algo diferente del predeterminado, comenzaría a comentar toda su configuración de resaltado, así como sus parámetros predeterminados. Luego jugaría con los parámetros de url que necesita, solo un par para comenzar: hl = on y hl.fl = title. Una vez que haya encontrado los parámetros correctos, puede configurarlos como predeterminados.

Dicho esto, dado tu título fieldType, sospecho que no está tokenizado, a menos que hayas cambiado la definición del tipo de cadena por defecto. En ese caso, su consulta no coincidirá con el campo de título, es por eso que no se resalta. ¿Estás utilizando edismax (o dismax)? En caso afirmativo, ¿cuál es su parámetro qf? ¿Es posible que el término toyota esté en otro campo que coincida con su consulta? Si está usando edismax, puede intentar buscar q = title: toyota ans para ver si obtiene resultados.

También puede verificar dónde está su coincidencia habilitando debugQuery = on y comprobando la salida de depuración.

ACTUALIZAR
Vi que cambiaste el título fieldType a text_general , pero esto no cambia nada porque ese tipo no se tokeniza en espacios en blanco. Aún no me has contado qué analizador de consultas estás utilizando. De todos modos, si estoy en lo cierto, debes usar WhitespaceTokenizerFactory lugar de StandardTokenizerFactory :

<tokenizer class="solr.WhitespaceTokenizerFactory"/>

Después de eso, recuerde reindexar todos sus datos; de lo contrario, no verá ningún cambio. Básicamente, si indexas algo como toyota whatever sin tokenar en espacios en blanco, no obtendrás ningún resultado buscando toyota , y ni siquiera tendrás toyota resaltado en ese campo porque no coincide. Mi suposición es que estás usando el analizador de consultas dismax o edismax y buscando en más de un campo, y algunos de ellos, pero no el título, coinciden con tu búsqueda, por eso obtendrás resultados pero no destacarás en el title , el único campo que seleccionaste para resaltar ¿Puedes publicar los resultados que obtienes buscando en toyota ? ¿El término toyota en algunos otros campos aparte del title ?

He leído varias veces el documento wiki de Solr destacando, busqué en todas partes, pero no puedo obtener ni siquiera el resaltado básico para trabajar con la instalación de Solr. Estoy ejecutando Solr 3.5 en el servidor demo Jetty 6.1.

He indexado documentos de 250K y puedo buscarlos muy bien. Además de configurar mis definiciones de campo de documento, la mayoría de la configuración de Solr es "estándar", aunque he comentado temporalmente los "valores predeterminados de resaltado" de solrconfig.xml para asegurarme de que no están causando este problema:

<!-- Highlighting defaults <str name="hl">on</str> <str name="hl.fl">title snippet</str> <str name="f.name.hl.fragsize">0</str> <str name="f.name.hl.alternateField">name</str> -->

Mi URL querystring es muy simple. He intentado muchas variaciones, pero esta es la última con la que devuelve la consulta más básica:

hl=on&hl.fl=title&indent=on&version=2.2&q=toyota&fq=&start=0&rows=1&fl=*%2Cscore

Aquí está el XML resultante:

<?xml version="1.0" encoding="UTF-8"?> <response> <lst name="responseHeader"> <int name="status">0</int> <int name="QTime">32</int> <lst name="params"> <str name="explainOther"/> <str name="indent">on</str> <str name="hl.fl">title</str> <str name="wt"/> <str name="hl">true</str> <str name="version">2.2</str> <str name="rows">1</str> <str name="fl">*,score</str> <str name="start">0</str> <str name="q">toyota</str> <str name="qt"/> <str name="fq"/> </lst> </lst> <result name="response" numFound="9549" start="0" maxScore="0.9960097"> <doc> <float name="score">0.9960097</float> <str name="id">2-33-200</str> <str name="title">1992 Toyota Camry 2.2L CV Boots</str> </doc> </result> <lst name="highlighting"> <lst name="2-33-200"/> </lst> </response>

¿Cómo puedo depurar este problema más? ¡Gracias!

Editar Aquí está la sección <highlighting> de solrconfig.xml. Como dije, es stock. Ese podría ser el problema, pero soy nuevo en Solr y todavía no estoy familiarizado con los puntos destacados (obviamente).

<highlighting> <!-- Configure the standard fragmenter --> <!-- This could most likely be commented out in the "default" case --> <fragmenter name="gap" default="true" class="solr.highlight.GapFragmenter"> <lst name="defaults"> <int name="hl.fragsize">100</int> </lst> </fragmenter> <!-- A regular-expression-based fragmenter (for sentence extraction) --> <fragmenter name="regex" class="solr.highlight.RegexFragmenter"> <lst name="defaults"> <!-- slightly smaller fragsizes work better because of slop --> <int name="hl.fragsize">70</int> <!-- allow 50% slop on fragment sizes --> <float name="hl.regex.slop">0.5</float> <!-- a basic sentence pattern --> <str name="hl.regex.pattern">[-/w ,//n/&quot;&apos;]{20,200}</str> </lst> </fragmenter> <!-- Configure the standard formatter --> <formatter name="html" default="true" class="solr.highlight.HtmlFormatter"> <lst name="defaults"> <str name="hl.simple.pre"><![CDATA[<em>]]></str> <str name="hl.simple.post"><![CDATA[</em>]]></str> </lst> </formatter> <!-- Configure the standard encoder --> <encoder name="html" class="solr.highlight.HtmlEncoder" /> <!-- Configure the standard fragListBuilder --> <fragListBuilder name="simple" default="true" class="solr.highlight.SimpleFragListBuilder"/> <!-- Configure the single fragListBuilder --> <fragListBuilder name="single" class="solr.highlight.SingleFragListBuilder"/> <!-- default tag FragmentsBuilder --> <fragmentsBuilder name="default" default="true" class="solr.highlight.ScoreOrderFragmentsBuilder"> <!-- <lst name="defaults"> <str name="hl.multiValuedSeparatorChar">/</str> </lst> --> </fragmentsBuilder> <!-- multi-colored tag FragmentsBuilder --> <fragmentsBuilder name="colored" class="solr.highlight.ScoreOrderFragmentsBuilder"> <lst name="defaults"> <str name="hl.tag.pre"><![CDATA[ <b style="background:yellow">,<b style="background:lawgreen">, <b style="background:aquamarine">,<b style="background:magenta">, <b style="background:palegreen">,<b style="background:coral">, <b style="background:wheat">,<b style="background:khaki">, <b style="background:lime">,<b style="background:deepskyblue">]]></str> <str name="hl.tag.post"><![CDATA[</b>]]></str> </lst> </fragmentsBuilder> <boundaryScanner name="default" default="true" class="solr.highlight.SimpleBoundaryScanner"> <lst name="defaults"> <str name="hl.bs.maxScan">10</str> <str name="hl.bs.chars">.,!? &#9;&#10;&#13;</str> </lst> </boundaryScanner> <boundaryScanner name="breakIterator" class="solr.highlight.BreakIteratorBoundaryScanner"> <lst name="defaults"> <!-- type should be one of CHARACTER, WORD(default), LINE and SENTENCE --> <str name="hl.bs.type">WORD</str> <!-- language and country are used when constructing Locale object. --> <!-- And the Locale object will be used when getting instance of BreakIterator --> <str name="hl.bs.language">en</str> <str name="hl.bs.country">US</str> </lst> </boundaryScanner> </highlighting>

Editar Aunque inicialmente mi campo "título" estaba en indexado = "falso", desde entonces probé poniéndolo en verdadero (sin cambios / sin resaltar todavía), y también termVectors = "true" termPositions = "true" termOffsets = "true" ... aún no hay efecto. (Intenté estos basados ​​en leer esta publicación en SO .)

Y aquí está mi definición de campo "título" a partir de ahora:

<field name="title" type="string" indexed="true" stored="true" required="true" termVectors="true" termPositions="true" termOffsets="true" />

Inicialmente comencé con:

<field name="title" type="string" indexed="false" stored="true" required="true" />

Editar Ahora también he probado esta definición:

<field name="title" type="text_general" indexed="true" stored="true" required="true" termVectors="true" termPositions="true" termOffsets="true" />

y ningún cambio en resaltar, todavía no funciona. Mi definición de text_general es la predeterminada que viene con la demostración de Solr:

<!-- A general text field that has reasonable, generic cross-language defaults: it tokenizes with StandardTokenizer, removes stop words from case-insensitive "stopwords.txt" (empty by default), and down cases. At query time only, it also applies synonyms. --> <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> <!-- in this example, we will only use synonyms at query time <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> --> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType>

Editar Ahora también he intentado volver a indexar el título con el tipo de campo text_en_splitting, que utiliza WhitespaceTokenizerFactory en lugar de StandardTokenizerFactory, y aún no resalta. Por lo que vale, estoy usando el analizador de consultas estándar, que de acuerdo con debugQuery = on es el LuceneQParser.

¡FINALMENTE! Gracias a @javanna por la ayuda. He hecho muchas pruebas, y los dos puntos clave son:

  1. Debe usar un tipo de campo de tokenización. El tipo de campo de cadena no funcionará. No parece necesario tener indexado = true o termVectors = true, pero el tipo de campo debe ser tokenizado.
  2. Debe tener cuidado de referirse a sus campos con el estuche adecuado. Además de atornillar la tokenización, también cambié la caja en mis campos durante el desarrollo y olvidé cambiar la caja en la definición de hl.fl (campo resaltado), lo que evita que el resaltado funcione.
  3. Asegúrese de volver a indexar entre cada cambio de configuración. Para estar seguro, estaba borrando todos los documentos del índice y reconstruyéndolo desde cero, pero eso puede no ser necesario.

Mi definición ahora aparece como:

<field name="Title" type="text_general" indexed="false" stored="true" required="true" />

Y mi solrconfig.xml tiene este conjunto:

<str name="hl">on</str> <str name="hl.fl">Title</str>