部分更新文件

Vin*_*y B 2 solr search-engine linkedin elasticsearch

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

SOLR 4允许这样做,但必须存储所有字段.请参阅更新现有文档的新字段http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/

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

  1. 另一方面,弹性搜索,linkedin的senseidb或其他文本搜索引擎能实现这一目标吗?

目前,我们通过在需要编制索引时对受影响的文档进行重新索引来进行管理

谢谢

jav*_*nna 8

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

lucene上的搜索服务器试图通过暴露一个能够删除旧文档并自动重新索引新文档的端点来解决这个问题,但必须有办法以某种方式检索旧文档.Solr只有在存储所有字段时才能执行此操作.

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

  1. 发送将与现有文档合并的新部分文档(仍然删除旧文档并索引合并结果
  2. 在现有文档上执行脚本并在删除旧文档后索引结果

两种选择都依赖于_source场的存在.存储源可以被禁用,如果你禁用它,你当然会失去这个伟大的功能.