部分更新文件

时间:2013-03-01 16:06:13

标签: solr search-engine elasticsearch linkedin

我们要求我们当前在SOLR中索引的文档可能需要定期更新。更新可以是 一个。添加新字段 湾更新现有字段的内容。 我们架构中的某些字段是存储的,而其他字段则不存储。

SOLR 4允许这样做,但必须存储所有字段。请参阅Update a new field to existing documenthttp://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/

问题: 1. SOLR有没有办法实现这一目标。我们过去曾尝试过SOLR JOIN,但它并不适合我们所有的用例。

  1. 另一方面,弹性搜索,linkedin的senseidb或其他文本搜索引擎能实现吗?
  2. 目前,我们通过在需要编制索引时对受影响的文档进行重新索引来进行管理

    由于

1 个答案:

答案 0 :(得分:8)

Solr具有存储字段的限制,这是正确的。底层lucene总是需要删除旧文档并索引新文档。事实上,lucene段是一次写入的,它永远不会返回修改现有段,因此它只将文档标记为已删除,并在合并发生时将它们删除为真实。

在lucene之上搜索服务器尝试通过公开能够删除旧文档并自动重新索引新文档的单个端点来解决此问题,但必须有办法以某种方式检索旧文档。只有存储了所有字段,Solr才能做到这一点。

Elasticsearch围绕它默认存储源文档,在一个名为_source的特殊字段中。这正是您在编制索引时首先发送给搜索引擎的文档。这是使弹性搜索类似于NoSQL数据库的功能之一。 elasticsearch Update API允许您以两种方式更新文档:

  1. 发送将与现有文档合并的新部分文档(仍然删除旧文档并将合并结果编入索引
  2. 在现有文档上执行脚本并在删除旧文档后将结果编入索引
  3. 这两个选项都依赖于_source字段的存在。存储源可以被禁用,如果你禁用它,你当然会失去这个伟大的功能。