2015-03-02 44 views
2

我想重新索引一个特定类型的所有内容,只需一次。如何重新索引某种类型的所有内容?

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

这是我迄今为止

from zope.component.hooks import getSite 

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

我不知道如何指定的类型......或者如果我在正确的轨道上。我可以剖析这种操作吗?

+0

通常在http://docs.plone.org上你可以找到几乎所有东西,特别是对于那些简单的东西。 – gforcada 2015-03-02 12:39:37

+0

问题:通常一个对象在修改后已经重新编制索引,这不够吗? – gforcada 2015-03-02 12:40:23

+1

这篇文档并没有让任何东西看起来简单......直到你看到API部分! 我改变了它的索引方式,它现在依赖于子项目,所以我需要重新对现有的父母进行索引而不清除子项。 – 2015-03-02 21:41:03

回答

4

居然会使用目录的最好方法:

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调用,所以您的代码将是未来的证明。

+0

这是否将修改日期设置为实际日期? – Mathias 2015-03-02 13:04:26

+0

不,你只是重新索引对象,而不是修改它。 – hvelarde 2015-03-02 13:25:47

+1

你也可以指定你想要重新索引的索引来加速进程;例如,obj.reindexObject(idxs = ['Title'])或obj.reindexObject(idxs = ['modified']) – hvelarde 2015-03-02 13:29:52

3

一个解决方案,我们使用:

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_object方法是由ZMI “更新” 功能使用相同的API:

ZMI Catalog update

优点:修改日期未更新,您只需重新索引目录数据 缺点:您无法使用受限制的Python中的此API(您可以拨打obj.reindexObject

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

+0

感谢您的提示。这个脚本也给我一个权限错误。 – 2015-03-05 03:51:59

相关问题