Plone 如何重新索引特定类型的所有内容?

Plone 如何重新索引特定类型的所有内容?,plone,Plone,我想重新索引特定类型的所有内容,只需一次 我应该在zmi中创建python脚本吗 这就是我目前所拥有的 from zope.component.hooks import getSite site = getSite() items = site.contentItems() items.reindexObject() 我不知道如何指定类型。。。或者如果我在正确的轨道上。是否有执行这种操作的示例,我可以分析?实际使用目录的最佳方法是: import plone.api catalog = p

我想重新索引特定类型的所有内容,只需一次

我应该在zmi中创建python脚本吗

这就是我目前所拥有的

from zope.component.hooks import getSite

site = getSite()
items = site.contentItems()
items.reindexObject()

我不知道如何指定类型。。。或者如果我在正确的轨道上。是否有执行这种操作的示例,我可以分析?

实际使用目录的最佳方法是:

import plone.api

catalog = plone.api.portal.get_tool(name='portal_catalog')
for brain in catalog(portal_type='My portal type'):
    obj = brain.getObject()
    obj.reindexObject()
那就行了

请注意,我只使用了plone.api调用,因此您的代码将经得起未来的考验。

我们使用的解决方案:

import plone.api

catalog = plone.api.portal.get_tool(name='portal_catalog')
for brain in catalog(portal_type='My portal type'):
    obj = brain.getObject()
    catalog.catalog_object(obj)
使用ZCatalog中的
catalog\u对象
方法与ZMI“更新”功能使用的API相同:

优点:修改日期不会更新,只需重新编制目录数据的索引即可 缺点:您不能从受限Python使用此API(同时可以调用
obj.reindexObject


如果您对修改日期的更改没有问题,gforcata的答案会更简单。

一般来说,您可以找到几乎所有的内容,特别是像这样的简单内容。问题:一般来说,对象在修改时已经重新编制了索引,这还不够吗?文档并没有让任何内容看起来简单。。。直到你看到API部分!我改变了索引的方式,现在它依赖于子项,因此我需要在不清除子项的情况下重新索引现有的父项。这会将修改日期设置为实际日期吗?不,您只是重新索引对象,而不是修改对象。您还可以指定要重新索引的索引以加快进程;例如,obj.reindexObject(idxs=['Title'])或obj.reindexObject(idxs=['modified'])我测试了这个解决方案(因为它看起来比我通常做的要酷得多),但不起作用:>>>catalog(portal_type='Document')[0]。reindexObject()回溯(最近一次调用):File“”,第1行,在TypeError:reindexObject()中至少接受2个参数(给定1个)@gforcada:看起来您正在调用目录中的reindexObject。你应该得到这个对象:brain.getObject().reindexObject()谢谢你的提示。这个脚本也给了我一个权限错误。