3

我们要求我们目前在 SOLR 中索引的文档可能需要定期进行部分更新。更新可以是一个。添加新字段 b. 更新现有字段的内容。我们模式中的一些字段被存储,其他的则没有。

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

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

  1. 另一方面,elasticsearch、linkedin的senseidb或其他文本搜索引擎能做到吗?

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

谢谢

4

1 回答 1

10

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

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

Elasticsearch 默认将源文档存储在一个名为_source. 这正是您在索引时首先发送给搜索引擎的文档。顺便说一下,这是使 elasticsearch 类似于 NoSQL 数据库的功能之一。elasticsearch更新 API允许您以两种方式更新文档:

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

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

于 2013-03-01T16:29:56.603 回答