我编写了一个自定义索引器,使用php将数据从mysql导入solr,而不是使用solr自己的数据导入处理程序。它工作得很好但是我在做定期索引时遇到困难。这是我脑海中的过程:
搜索所有索引并找到已删除的实体,将它们与 mysql中的数据并从solr中删除它们。
在mysql中查找最近更改的实体并仅对它们编制索引。 (我有 至少有12个核心表,我需要检查所有表格
所以我的问题是,这是一个好方法,还是你建议更有效率的东西。感谢。
Ps:我没有使用solr的数据导入处理程序,因为我自己有很多事情要做,比如分层数据管理等。我不知道我是否可以用数据导入处理程序完成所有这些操作。
答案 0 :(得分:1)
您可以在更改项目或从数据库中删除项目时开始跟踪更改。然后,您只需要通过该列表来更新索引。或者向数据库实体添加“已创建/上次更新”字段。但这可能是一项复杂的任务,具体取决于您的系统架构和逻辑。
您还可以节省检查您的项目是否存在于数据库或索引中,并且只是重新索引所有内容 - 在数据集上不是很大,可以更快(只需确保相同的索引实体将收到与之相同的Solr ID)之前为了替换旧版本而不是复制它。)
另一种方法是让所谓的“delta index”仅包含最近修改过的项目,因此你必须将Solr与Solr合并而不是Solr与DB合并。
如果你仍然需要检查每一个项目,那么首先从DB请求它们可能会更好,因为Solr搜索通常更快。然后,您可以批量运行Solr查询,同时通过其ID请求许多文档,并循环遍历该集合,以使它们与您的数据库记录相匹配。因此,类似于请求N的结果来自DB /生成他们的Solr ID /请求N个Solr文档按ID在单个查询/匹配集中应该有效。但显然这是一种“蛮力”的方法。
答案 1 :(得分:0)
另一个选项是在你的应用程序中实现一个过滤器(比如请求拦截器 - 不知道PHP,但在java servlet世界中称为Filter),它会立即更新solr中的文档,因为它是通过你的应用于mysql。