经常更新索引solr的索引体系结构?

时间:2018-01-11 12:34:43

标签: solr lucene solrj solrcloud

我在schema.xml中有大约50M文档,90个(存储(20)+非存储(70))字段,索引在单核中。查询非常复杂,还有分面和突出显示。在这90个字段中,有3-4个字段(全部存储),这些字段经常上传。现在,更新这些字段通常需要再次填充所有字段,这是繁重的任务。如果我使用原子/部分更新,我们必须再次更新非存储字段。

我们的解决方案: 为了克服上述问题,我们决定使用SolrCloud和Join查询。我们将索引拆分为两个单独的索引/集合,即一个用于存储字段,一个用于非存储字段。 b / w关系文件是doc的id。我们将经常更新的字段保存在存储索引中。通过这样做,我们能够利用原子更新。另外,为了克服云中连接查询的限制,我们将其分解为&在所有节点上复制存储的字段,但是未存储的字段没有分片,而是在所有节点上复制。我们有一个5节点集群,另外还有3个zookeeper实例。考虑到文档的数量,唯一关注的领域是连接查询最终会降低搜索性能吗?如果是这样,我还可以考虑其他选择。

1 个答案:

答案 0 :(得分:1)

考虑加入使Solr更像是一个关系数据库。我在Lucidworks团队Solr and Joins找到了一篇关于此的文章。即使他们说如果你的解决方案包括使用Join,那么这意味着你需要重新考虑这一点。

我想我有一个解决方案给你们。首先,忘记两个集合。您创建一个集合,并且每个文档都有两个Solr文档。现在,一个文档将具有存储的字段,另一个文档将具有非存储的字段。在更新时,您将更新已存储字段的文档,并对另一个文档执行与搜索相关的操作。

现在您需要做的就是在查询时需要将两个文档合并到一个文档中,这可以通过在Solr上编写服务层来完成。