【问题标题】:Update SearchableText index on dexterity type更新敏捷类型的 SearchableText 索引
【发布时间】:2014-06-06 10:00:10
【问题描述】:

我正在尝试更新我的灵巧类型(“资源”)上的 SearchableText,以包含来自子项的文件内容,方法是将其添加到 resource.py:

@indexer(IResource)
def subFiles(obj):
    searchable_text = obj.SearchableText()

    for item in obj.getFolderContents({'portal_type': 'File'}, full_object=True):
        searchable_text += item.SearchableText()
    return searchable_text

grok.global_adapter(subFiles, name="SearchableText")

我知道我需要一个事件来更新它,但相信我应该能够看到通过从 ZMI 手动“清除和重建”修改的索引,但是对于此内容的对象,SearchableText 的值没有发生任何变化类型。我也没有看到任何错误,所以我不确定问题出在哪里。

【问题讨论】:

    标签: plone dexterity


    【解决方案1】:

    好吧,我没认出here,你正在使用灵巧。

    您需要dexteritytextindexer 行为: https://github.com/collective/collective.dexteritytextindexer

    在您的容器类型上启用此功能。

    <property name="behaviors">
        <element value="collective.dexteritytextindexer.behavior.IDexterityTextIndexer" />
    </property>
    

    使用 dexteritytextindexer,您可以使用不同的方法来索引容器上的数据。检查dexteritytextindexer.IDynamicTextIndexExtender

    【讨论】:

    • 进行 zcml 下列出的添加会给出: ConfigurationError: ('Invalid value for', 'factory', "ImportError: Couldn't import hccrems.types.indexer, No module named indexer in .indexer. MySearchableTextExtender")
    • 我的类型是 'resource',所以应该是 .resource.MySearchableTextExtender 吗?这不会引发错误,但 Searchable 文本也不会改变。
    • 最后一段让我很困惑。我如何知道我的敏捷内容类型是否使用“定义的工厂”?
    • 你不应该混合 zcml 和 grok,用 zcml 或 grok 注册你的适配器,如果你同时使用它会有点乱。我使用 zcml,因为它更容易阅读/查找组件。是的 grok 是 pythonic,但不在 plone 核心中。您有 indexer.py,还是在 type.py 中定义索引?你能粘贴所有相关代码吗?
    • resource.py:pastie.org/9262685lresource.xml:pastie.org/8999579 hccrems.types.resource.xml:pastie.org/8999581 configure.zcml:pastie.org/8999582
    猜你喜欢
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    相关资源
    最近更新 更多