我已经玩 solr 大约一个星期了。我的问题可能是与突出显示有关的罕见案例,因为我无法在 SO 或 Internet 上的任何地方找到解决方案。
我启用了突出显示,几乎一切正常 - 我得到搜索结果,突出显示的部分返回<lst name="highlighting">
.
问题是,实际上包含文本突出显示部分的子节点都没有 name 属性,该属性应该与相应结果项的 id 属性相同。
下面是使用 solr admin 搜索返回的结果的摘录。
<result name="response" numFound="121" start="0" maxScore="2.3798883">
<doc>
<float name="score">2.3798883</float>
<str name="Turn">Android Linux</str>
<str name="id">dcc190ba-143b-4fb7-b868-ef06875210fe</str>
<float name="startTime">961.98</float>
</doc>
<doc>
<float name="score">1.009701</float>
<str name="Turn">
ci sono per� degli aspetti diversi perch� Microsoft vendeva windows mentre l' Ugl regala Android che quindi la licenza Android non costa nulla
</str>
<str name="id">804df3fb-3709-4bf8-a0d0-718dc5da18f1</str>
<float name="startTime">2445.19</float>
</doc>
</result>
<lst name="highlighting">
<lst>
<arr name="Turn">
<str><span class="highlight">Android</span> Linux</str>
</arr>
</lst>
<lst>
<arr name="Turn">
<str>ci sono per degli aspetti diversi perch Microsoft vendeva windows mentre l' Ugl regala <span class="highlight">Android</span>
</str>
</arr>
</lst>
<lst>
<arr name="Turn">
<str><span class="highlight">Android</span> nd Kappa e l' ambiente che ci permette di scrivere in codice in attivo
</str>
</arr>
</lst>
</lst>
可以看出,每个结果都有 id 属性。只是它没有在节点中使用。
我使用 uuid 类型作为 solr 自动生成的 id。
这是我的 schema.xml 文件的一部分。
<field name="id" type="uuid" indexed="true" stored="true" required="true" default="NEW"/>
<field name="startTime" type="float" indexed="true" stored="true" />
<field name="Turn" type="text_general" indexed="true" stored="true"/>
fieldType uuid 在 schema.xml 文件中定义如下:
<fieldType name="uuid" class="solr.UUIDField" indexed="true" />
下面是生成 id 的更新处理器(在 solrconfig.xml 中):
<updateRequestProcessorChain name="uuid">
<processor class="solr.processor.SignatureUpdateProcessorFactory">
<bool name="enabled">true</bool>
<str name="signatureField">id</str>
<bool name="overwriteDupes">false</bool>
<str name="fields">*</str>
<str name="signatureClass">solr.processor.Lookup3Signature</str>
</processor>
<processor class="solr.LogUpdateProcessorFactory" />
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
如果没有 id 作为项目内 name 属性的值,我将无法进行进一步的处理,例如替换结果中的文本。我希望这些信息足够了。否则请告诉我。两天来,我一直在努力解决这个问题。
干杯。