文档的廉价字符串存储

时间:2012-11-27 14:21:17

标签: solr

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

我知道Solr 4.0有部分文档更新,但在更改可见之前仍需要重新索引文档。

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


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

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

1 个答案:

答案 0 :(得分:1)

您可以考虑在Solr中使用ExternalFileField。这可能是获取未直接存储在索引中的值的存储的唯一方法。但是,每次更新文件时都必须重新加载,因此可能存在潜在的性能问题 - 请参阅ExternalFileField Best Practices from the Solr Mailing List

此外,如果您决定使用ExternalFileField in Solr,还可以使用RealTime Get

<强>更新

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

Update2:RealTimeGetComponent

所以我查看了处理程序源代码,并且有一个{{3}}。我在默认的/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中执行的查询提取更新的文档。这将是一个很好的未来功能。