2015-03-02 75 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

相關問題