跳转到主要内容

Plone内容索引操作的排队、优化和调度框架。

项目描述

简介

collective.indexing 是一种提供抽象框架的方法,用于在 Plone 中排队和优化索引操作,并将它们调度到各种后端。默认实现旨在替换 CMF 的标准索引机制,以便以向后兼容的方式异步处理索引操作。

在事务级别排队这些操作可以避免对象重复索引,从而提供显著的性能改进。通过利用组件架构和 Zope 事件系统,collective.indexing 还使使用除标准门户目录之外或作为其补充的后端(例如,像 SolrXapianGoogle 搜索设备 这样的专用搜索引擎解决方案)进行索引变得容易得多。已经启动了一个后端实现,用于与这个包一起使用,形式为 collective.solr

当前状态

该实现被认为已经准备好投入生产。它可以在 Plone 4.x 网站上安装,以启用索引操作在 Zope 事务边界上进行排队、优化和调度到标准门户目录,从而提高 Plone 的即开即用 性能

目前,该软件包需要几个“猴子补丁”,以连接索引当前使用的混合类,即 CMFCatalogAwareCatalogMultiplex,门户目录以及 Plone 自身的辅助方法。计划通过使这些类“可插拔”并通过适配器化来清理这些问题,从而使 collective.indexing 能够以干净的方式连接。

collective.solr 一起,该软件包还提供了一种将 SolrPlone 集成的有效解决方案。基于可在 zc.buildout 级别配置的模式,索引操作可以调度到 Solr 实例,以及标准目录。这允许基于 Archetypes 的标准 Plone 内容项进行最小化和非常高效的索引。支持其他内容类型相当简单,并将很快得到支持。

代码编写注重简约、清晰和可维护性。它附带了广泛的测试,覆盖了代码库的 95% 以上。该软件包目前正在几个生产网站上使用,被认为是稳定的。

有关未解决的问题和即将实施的功能,请参阅 问题跟踪器

订阅者支持

该软件包包括通过事件订阅者排队和执行索引操作的支持。其背后的想法是不要仅仅依赖于在 CMFCatalogAware 中定义的显式调用,而是最终使其变得可能。由于通过订阅者添加的附加索引操作已经优化掉,因此这只会增加很少的处理开销。

然而,尽管 IObjectModifiedEvent 支持通过传递描述/索引名称的列表进行部分重新索引,但目前在 Plone 中任何地方都没有使用。遗憾的是,这意味着部分重新索引操作将被“升级”为完整重新索引,例如通过 notifyContainerModified 辅助程序对 IContainerModifiedEvent 进行,这是为什么订阅者支持目前没有默认启用的一个原因。

要激活,请使用

[instance]
...
zcml = collective.indexing:subscribers.zcml

而不是仅使用软件包名称,重新运行 buildout 并重新启动您的 Plone 实例。

常见问题/故障排除

以下内容试图解决一些已知问题。请确保检查软件包的问题跟踪器,并使用它来报告新错误和/或讨论可能的改进。另外,通过“Plone 开发者”邮件列表提供反馈也非常受欢迎。

“OFS.Uninstalled 无法从模块‘…’导入类‘…’”警告

症状

在重启 Zope 后加载您的 Plone 网站后,即浏览它时,您会看到如下警告

WARNING OFS.Uninstalled Could not import class 'PortalCatalogQueueProcessor' from module 'collective.indexing.indexer'
WARNING OFS.Uninstalled Could not import class 'IndexQueueSwitch' from module 'collective.indexing.queue'
问题

早期版本的软件包使用了持久的本地实用工具,这些实用工具仍然存在于您的 ZODB 中。这些实用工具已经被替换,并且不再需要旧的实例。

解决方案

请通过 Plone 的控制面板或快速安装程序简单重新安装软件包。或者,您也可以使用网站根对象上的 ZMI “组件”标签,通常位于https://127.0.0.1:8080/plone/manage_components,从 XML 中移除损坏的实用工具。搜索“损坏”。

致谢

此代码灵感来源于 Enfold Systems 的 enfold.indexing 和 enfold.solr,以及Enfold Systems以及2008 年 snowsprint 的工作。TransactionManager 模式来自 enfold.solr。开发得到了Elkjop的慷慨赞助。

变更日志

2.1 (2018-07-20)

  • reindexObjectSecurity 操作由队列处理(#14)。这解决了 Solr 等上的不同步安全索引的 bug。[ale-rt]

2.0 (2017-04-13)

  • 添加了一个删除猴子补丁的方法。[gforcada]

  • 生命周期结束:从 Plone 5.1.0 版本开始,collective.indexing 已合并到 Plone 核心中。它提供的功能已经可用。[gforcada]

2.0b1 - 2013-02-16

  • 补偿 ZCML 配置顺序的变化。[rockfruit]

2.0a3 - 2011-08-22

2.0a2 - 2011-07-19

  • 使用 plone.app.testing 而不是 c.testcaselayer。[hannosch]

  • 使用 getSiteManager 查找所有 IIndexQueueProcessor,以捕获在本地站点管理器中注册的处理器。[hannosch]

2.0a1 - 2011-07-09

升级说明:此版本需要 Plone 4.1,但不再需要任何持久的配置或具有任何 UI。请在附加组件控制面板中停用此插件。只要软件包在 Python 路径上可用,功能就会存在。[hannosch]

  • 使用 zope.container 中的 dispatchToSublocations。[hannosch]

  • 在调用索引处理器的 begin 方法之前优化队列,从而避免如果队列优化为不包含任何项目时的额外设置成本。[hannosch]

  • 删除了 reindexOnReorder 补丁,因为在 Plone 4 中不再需要。[hannosch]

  • 删除了条件自动刷新功能,并始终启用它。[hannosch]

  • QueueReducer 合并到 queue.optimize 方法中。[hannosch]

  • 删除了 utils.getIndexer 间接引用。[hannosch]

  • 删除了 utils.isActive - 当安装时,我们始终处于活动状态。[hannosch]

  • 删除了 Plone 3 向后兼容代码。此版本需要 Plone 4。[hannosch]

  • 删除了 GenericSetup 配置文件、Plone 控制面板,并将配置移动到全局实用工具。[hannosch]

  • 添加了卸载配置文件。[kiorky]

1.8 - 2010 年 7 月 20 日发布

1.7 - 2010 年 4 月 16 日发布

  • 防止在全文重新索引时多次更新对象的修改日期。这解决了http://plone.org/products/collective.indexing/issues/11。[witsch]

  • 确保队列处理中的错误不会在模块全局处理集中留下队列,从而防止进一步的索引。[hannosch]

  • 将依赖关系从Archetypes更改为软依赖。[witsch]

  • 同时修补Archetypes的BaseBTreeFolder,因为它通常在修补方法到位之前初始化,它保留了来自CMFCatalogAware的方法引用。[witsch]

  • 调整测试以适应与PLIP 4379相关的更改。[witsch]

  • 添加辅助方法以确定给定对象是否具有给定索引方法的副本,例如reindexObject。[witsch]

1.6 - 2010年3月6日发布

  • 清理并分离出仅用于测试的依赖项。[witsch]

1.5 - 2010年3月4日发布

1.4 - 2010年2月11日发布

  • 确保“生命周期”操作的索引在有和无事件订阅者的情况下以(几乎)相同的方式工作。[witsch]

1.3 - 2010年2月2日发布

1.2 - 2010年1月23日发布

  • 改进自动刷新的日志记录,以便更容易地进行性能调整。[witsch]

  • 添加对Zope 2.12的支持。[wichert]

  • 通过依赖测试函数的较少内部细节,使所有但一个测试在Plone 3和4上都能工作。[hannosch]

  • 调整测试以在层中显式设置站点。[hannosch]

  • 将zope.app.event导入更改为zope.lifecycleevent。前者自Zope 2.10以来已弃用。[hannosch]

  • 修复了IObjectModified事件无描述的订阅者问题。[gweis]

1.1 - 2009年6月9日发布

  • 修补CatalogTool.getCounter,在返回指示目录更改的计数器(即自动刷新)之前处理索引队列。[witsch]

1.0 - 2009年5月8日发布

  • 使用ZCML注册导入和导出步骤。[witsch]

1.0rc5 - 2009年4月20日发布

  • 添加对GenericSetup的支持。[witsch]

  • 添加配置小部件以允许TTW激活和配置。[witsch]

  • 更新代码以(几乎)符合PEP8样式指南。[witsch]

  • 向修补程序添加了日志记录。[swampmonkey]

1.0rc4 - 2008年12月8日发布

  • 提供针对在事件订阅者中移动对象后使用过时的获取链进行索引的问题的解决方案。[witsch]

  • 优化“自动刷新”以防止不必要的组件查找。[witsch]

1.0rc3 - 2008年11月19日发布

1.0rc2 - 2008年11月17日发布

  • 修复了当启用“自动刷新”功能时,索引辅助程序可能会通过使用目录造成无限循环的问题。[witsch]

  • 恢复并扩展有关软件包安装的测试。[witsch]

1.0rc1 - 2008年11月5日发布

  • 恢复了processQueue函数,因为它在概念上很重要。[stefan]

1.0b5 - 2008年10月16日发布

  • 修复了事务处理,以便正确地中止索引操作。[witsch]

  • 重构自动刷新队列的辅助方法,使其更容易重用。[witsch]

  • 在所有版本的Plone 3.x中启用对PloneTool.reindexOnReorder的修补程序,因为它尚未上游移植。这修复了http://plone.org/products/collective.indexing/issues/1 [witsch]

  • 重构自动刷新修补程序,以便不干扰测试。[witsch]

  • 修复CatalogTool.searchResults以在发出查询之前处理索引队列(即自动刷新)。[stefan]

  • 修复测试隔离问题并改进测试设置。[witsch]

  • 确保QueueReducer按opcode排序结果。必须先处理(重新)索引操作,然后再处理反索引操作。[stefan]

  • 添加processQueue函数以立即处理队列。[stefan]

  • 通过在afterSetUp中清除文件的创建标志,修复Plone 3.1中的testModifyObject。[stefan]

  • 通过让线程休息片刻以便线程可以完成其工作,修复Linux上的testQueuesOnTwoThreads。[stefan]

1.0b4 - 2008年6月30日发布

  • 在事务“活动”状态下进行队列处理,因为在“提交”状态下不允许进行其他更改。例如,这些更改可能是由索引将数据写回内容项(如修改时间)引起的。[witsch, mj]

1.0b3 - 2008年6月18日发布

  • 修复了一个问题,即提供自己的__setattr__的对象可能无法被删除。[witsch]

1.0b2 - 2008年6月2日发布

  • 添加aq_inner以防止与safe_hasattr相关的无限递归。[witsch]

1.0b1 - 2008年5月28日发布

  • 确保在PathWrapper中正确获取REQUEST。[tesdal]

1.0a3 - 2008年5月28日发布

  • 尊重覆盖的索引方法以防止错误索引,并通常允许特殊处理。[witsch]

  • 修复重命名对象后的索引条目。[witsch]

  • 坏猴子猛烈反击,但最终被驯服。[witsch]

  • 击退了一个检查不存在属性getObjPositionInParent的坏猴子。[tesdal]

1.0a2 - 2008年5月25日发布

  • 修复队列减少器逻辑中不同类型的问题。[fschulze]

  • 通过用更合理的版本替换PloneTool.reindexOnReorder来修复内容项重命名的问题,该版本不依赖于目录。[witsch]

  • 各种修复、清理和优化。[witsch]

  • 修复猴子补丁,以便在队列索引被禁用(或GS配置文件尚未应用)时,正常索引仍然可以正常工作。[witsch]

1.0a1 - 2008年3月31日发布

  • 初始发布 [tesdal, witsch]

项目详情


下载文件

下载适用于您平台的文件。如果您不确定该选择哪个,请了解更多关于安装包的信息。

源分发

collective.indexing-2.1.tar.gz (45.0 kB 查看哈希值)

上传时间

由以下机构支持