Solr期刊索引器


Periodical Indexer For Solr

我已经编写了一个自定义索引器,使用php将数据从mysql导入solr,而不是使用solr自己的数据导入处理程序。它工作得很好,但我在做期刊索引时被卡住了。以下是我脑海中的过程:

  1. 搜索所有索引并将其与mysql中的数据,并将它们从solr中删除。

  2. 在mysql中查找最近更改的实体,并仅对其进行索引。(我一个核心至少有12个表,我需要检查所有)

所以我的问题是,这是一个好方法,还是你建议更有效的方法。谢谢

Ps:我没有使用solr的数据导入处理程序,因为我自己有太多事情要做,比如分层数据管理等。

当项目发生更改或从数据库中删除时,您可以开始跟踪更改。然后,您只需要浏览该列表即可更新索引。或者在数据库实体中添加一个"已创建/上次更新"字段。但这可能是一项复杂的任务,具体取决于您的系统架构和逻辑。

您还可以节省检查项目是否存在于数据库或索引中的时间,只需重新索引所有内容-在不太大的数据集上,这可能会更快(只需确保同一个索引实体将收到与以前相同的Solr ID,以便替换其旧版本,而不是复制它)。

另一种方法是让所谓的"delta索引"只包含最近修改的项,所以你必须将Solr与Solr合并,而不是将Solr和DB合并。

如果你仍然需要检查每一个项目,最好先从DB请求,因为Solr搜索通常更快。然后,您可以在批处理中运行Solr查询,一次按ID请求多个文档,并循环使用该集合,使它们与您的DB记录相匹配。因此,像从DB请求N个结果/生成它们的Solr ID/在单个查询/匹配集中按ID请求N个Solr文档这样的东西应该可以工作。但显然,这是一种"蛮力"方法。

另一种选择是在你的应用程序中实现一个过滤器(比如请求拦截器-不知道PHP,但在javaservlet世界中它被称为过滤器),它会立即更新solr中的文档,因为它是通过mysql中的应用程序更改的。