我有很多Dexterity内容类型,其中一些只是容器,只留下标题和描述(来自plone.app.dexterity.behaviors.metadata.IBasic行为)。
我可以通过搜索标题或说明中的文字找到它们。
但是对于一些复杂的内容类型我使用collective.dexteritytextindexer来索引更多字段并且工作正常,我可以在我标记为要编制索引的字段上找到该文本。
但标题和说明不再可用于搜索。我试过像:
class IMyContent(form.Schema):
"""My content type description
"""
dexteritytextindexer.searchable('title')
dexteritytextindexer.searchable('description')
dexteritytextindexer.searchable('long_desc')
form.widget(long_desc = WysiwygFieldWidget)
long_desc = schema.Text (
title = _(u"Rich description"),
description = _(u"Complete description"),
required = False,
)
...
但我无法在portal_catalog中的SearchableText列中看到标题和说明的内容,因此结果不会显示它们。
知道我缺少什么吗?
干杯,
答案 0 :(得分:5)
几乎有同样的问题。关于http://pypi.python.org/pypi/collective.dexteritytextindexer的文档,我使用了
from collective import dexteritytextindexer
from plone.autoform.interfaces import IFormFieldProvider
from plone.directives import form
from zope import schema
from zope.interface import alsoProvides
class IMyBehavior(form.Schema):
dexteritytextindexer.searchable('specialfield')
specialfield = schema.TextField(title=u'Special field')
alsoProvides(IMyBehavior, IFormFieldProvider)
将我自己的字段编入索引。但是,代码
from plone.app.dexterity.interfaces import IBasic
from collective.dexteritytextindexer.utils import searchable
searchable(IBasic, 'title')
searchable(IBasic, 'description')
没用。 IBasic的导入失败了。似乎可以通过导入
轻松解决from plone.app.dexterity.behaviors.metadata import IBasic
答案 1 :(得分:4)
问题可能是该字段来自IBasic或IDublineCore行为,而不是来自您的架构。我不太了解collective.dexteritytextindexer知道如何解决这个问题。
另一种选择可能是使用plone.indexer并创建自己的SearchableText索引器,该索引器返回“%s%s%s”%(context.title,context.description,context.long_desc,)。有关详细信息,请参阅Dexterity文档。
答案 2 :(得分:1)
作为参考,这是我最后编写的代码:
@indexer(IMyDexterityType)
def searchableIndexer(context):
transforms = getToolByName(context, 'portal_transforms')
long_desc = context.long_desc // long_desc is a rich text field
if long_desc is not None:
long_desc = transforms.convert('html_to_text', long_desc).getData()
contacts = context.contacts // contacts is also a rich text field
if contacts is not None:
contacts = transforms.convert('html_to_text', contacts).getData()
return "%s %s %s %s" % (context.title, context.description, long_desc, contacts,)
grok.global_adapter(searchableIndexer, name="SearchableText")