He leído varias veces el documento wiki que destaca Solr, 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.¿Por qué falla este simple intento de resaltado Solr?
He indexado 250K documentos, y puedo buscarlos muy bien. Aparte de la configuración de mis definiciones de campo de documentos, la mayor parte de la configuración de Solr es "de valores", aunque he comentado temporalmente fuera "por defecto" Destacar de la solrconfig.xml para asegurarse 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 aquí está mi última con ella volviendo 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í es 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 esta cuestión? ¡Gracias!
Editar Aquí es la sección de <highlighting>
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\"']{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">.,!? 	 </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" se establece en indexada = "true" desde entonces han probado que con true (sin cambio/no resaltado todavía), y también termVectors = termPositions "verdaderos" = "true" termOffsets = "true" ... aún no tiene efecto. (He probado todas estas basado en la lectura de this post to SO.)
Y aquí está mi "título" definición de campo a partir de ahora:
<field name="title" type="string" indexed="true" stored="true" required="true" termVectors="true" termPositions="true" termOffsets="true" />
Inicialmente Empecé con:
<field name="title" type="string" indexed="false" stored="true" required="true" />
Editar I Ahora también he intentado esta definición:
<field name="title" type="text_general" indexed="true" stored="true" required="true" termVectors="true" termPositions="true" termOffsets="true" />
y sin cambios en el resaltado, todavía no funciona. Mi definición text_general es el que viene por defecto 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 He ahora también trató título volver a clasificar con el FieldType text_en_splitting, que utiliza WhitespaceTokenizerFactory en lugar de StandardTokenizerFactory, y todavía no hay resaltado. Por lo que vale, estoy usando el analizador de consultas estándar, que de acuerdo con debugQuery = on es el LuceneQParser.
FINALIZADO! Gracias a @javanna por la ayuda. He hecho muchas pruebas, y los dos puntos clave son:
- 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.
- Debe tener cuidado de referirse a sus campos con la caja adecuada. 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.
- Asegúrese de volver a indexar 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 aparece ahora 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>
¿Podría publicar su definición de campo de título en su schema.xml? – javanna
Claro, lo siento, dejé eso inicialmente. –
Gracias! Una cosa más: ¿cuál es la definición de la cadena fieldType en su schema.xml? ¿El predeterminado o algo diferente? – javanna