1

我想将标签添加到现有文档。该tags字段已存储但未编入索引,但我希望在没有(软)提交开销的情况下查看最新值。tags例如q=christmas&fl=text,tags将在提交之前返回最新的标签。

我知道 Solr 4.0 有部分文档更新,但它仍然需要重新索引文档才能看到该更改。

有没有办法在不进行昂贵的重新索引的情况下获得最新价值?比如NRT?


我更喜欢旧查询处理程序附带的结果。

在 NRT 的情况下,我不介意延迟几秒钟。

4

1 回答 1

1

您可以考虑在 Solr 中使用ExternalFileField 。这可能是获取未直接存储在索引中的值的唯一方法。但是,每次更新文件时都必须重新加载,因此这可能是一个潜在的性能问题 - 请参阅Solr 邮件列表中的 ExternalFileField 最佳实践

此外,如果您决定这样做,这里是如何在 Solr 中使用 ExternalFileField 的一个很好的演练。

更新:

我建议使用Solr 4.0 附带的RealTime Get via 。/get这提供了您正在寻找的确切功能。然后,您可以将其与文档更新结合起来,无需每次都更新整个文档。

更新 2:RealTimeGetComponent

所以我查看了处理程序源代码,并且有一个RealTimeGetComponent。我在默认处理程序上启用了它,/select如下所示。主要项目是设置&get=true参数并使其成为最后一个组件。

<!-- RealTimeGet Component-->
<searchComponent name="realtimeGet" class="solr.RealTimeGetComponent"/>

<requestHandler name="/select" class="solr.SearchHandler">
   <lst name="defaults">
     <str name="echoParams">explicit</str>
     <int name="rows">10</int>
     <str name="df">text</str>
     <bool name="get">true</bool>
   </lst>
   <arr name="last-components">
     <str>realtimeGet</str>
   </arr>
</requestHandler>

查询 -/select?q=id%3Amydoc2&wt=xml&id=mydoc2 将产生以下输出:

    <response>
       <lst name="responseHeader">
         <int name="status">0</int>
         <int name="QTime">2</int>
         <lst name="params">
           <str name="id">mydoc2</str>
           <str name="wt">xml</str>
           <str name="q">id:mydoc2</str>
         </lst>
      </lst>
      <result name="response" numFound="1" start="0">
        <doc>
          <str name="id">mydoc2</str>
          <arr name="title">
            <str>realtime-get updated3</str>
          </arr>
          <long name="_version_">1419891443321798656</long>
        </doc>
      </result>
      <doc name="doc">
        <str name="id">mydoc2</str>
        <arr name="title">
          <str>realtime-get updated - new</str>
        </arr>
        <long name="_version_">1419892263820984320</long>
      </doc>
    </response>

所以在这个例子中,它查询项目,id=mydoc2然后获取项目的最新版本,并显示和值id=mydoc2的差异。_version_title

但是,为了获得此信息,您需要传递文档的 id 或 id 以获取更新版本。该组件似乎没有被编码为能够为正在使用它的 requestHandler 中执行的查询提取更新的文档。这将是一个很好的未来功能。

于 2012-11-27T14:43:36.713 回答