我有一个运行Plone 4.1的站点,它具有使用Dexterity 1.1开发的自定义内容类型。我的内容作者可以使用“分类”选项卡向基本Plone页面添加关键字,如果用户使用其中一个关键字进行搜索,则会成功找到这些页面。
我的内容作者还使用我开发的Dexterity自定义内容类型制作了页面。这是使用基于Python的文件系统架构定义的。如果用户在敏捷内容类型的标题和描述中搜索术语,他们将在搜索结果中返回敏捷页面。如果他们在关键字字段中使用查询字词进行搜索,则无法获得任何结果。但是,在高级搜索表单下,如果他们在标签列表中突出显示相应的标签,他们可以找到Dexterity页面。
我使用ZMI中的portal_catalog工具检查了搜索索引的内容。似乎关键字被添加到SearchableText字段中以获取基本内容类型(例如Page),但对于基于Dexterity的自定义内容类型,它们不是。
我是否需要编写其他代码才能将关键字字段的内容插入SearchableText索引?
答案 0 :(得分:6)
假设你的Dexterity内容类型实现了IFoo,你的模式中定义的keywords属性是一个字符串列表。
您可以通过以下方式定义索引器:
from five import grok
from plone.indexer.decorator import indexer
from my.dexteritycontent.foo import IFoo
@indexer(IFoo)
def searchableIndexer(context):
keywords = " ".join(context.keywords)
return "%s %s %s" % (context.title, context.description, keywords)
grok.global_adapter(searchableIndexer, name="SearchableText")