1

我已经玩 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 属性的值,我将无法进行进一步的处理,例如替换结果中的文本。我希望这些信息足够了。否则请告诉我。两天来,我一直在努力解决这个问题。

干杯。

4

2 回答 2

2

我和你有同样的问题。唯一不同的是,我启动了一个新的 solr 实例。所以我没有原件可以回去。

我通过用“字符串”替换 id 类型并在数据中添加自定义唯一键来修复它。我还在配置中添加了唯一的关键元素。

<uniqueKey>id</uniqueKey>
<field name="id" type="string" indexed="true" stored="true" required="true" />

这解决了我的问题。不知何故,它不适用于“uuid”类型。

希望这可以帮助遇到同样问题的任何人。

注意:uniqueKey 字段应位于“字段”节点之外

于 2014-09-02T21:14:50.363 回答
0

在另一个绝望的尝试中,我用原始文件替换了我的 solrconfig.xml 文件,只放回我所做的特定更改,问题就消失了。我确信这个问题可以追踪到几个特定的​​行,因为我必须在我练习的前几天在那里添加了一些东西,这对我来说是一团糟。

于 2012-11-30T12:59:56.493 回答