我正在尝试为我的内容类型扩展SearchableText索引。 我已成功通过将它们标记为索引器来包含多个字段:模型文件中的searchable =“true”。 但是我无法从我的类型py中扩展SearchableText,如下所示:
class IMyBehavior(form.Schema):
dexteritytextindexer.searchable('description')
description = schema.Text(title=u'Precis')
alsoProvides(IMyBehavior, IFormFieldProvider)
class MySearchableTextExtender(object):
adapts(IMyBehavior)
implements(dexteritytextindexer.IDynamicTextIndexExtender)
def __init__(self, context):
self.context = context
def __call__(self):
"""Extend the searchable text with a custom string"""
return 'some more searchable words'
我必须承认,我真的不知道第一堂课是如何运作的。我是否必须在此类中设置可搜索字段才能在第二个字段中扩展SearchableText? 如果我从模型中删除所有索引器:searchable =“true”,那么SearchableText就是空的。
第一个类是否尝试同时注册模式?如果是这样,如果它只是扩展SearchableText会是什么样子?
答案 0 :(得分:3)
collective.dexteritytextindexer
提供了两个重要功能:
正如您已经实现的那样,dexteritytextindexer
使您能够将values
放入Plone的SearchableText
索引中。通过向表单添加dexteritytextindexer.searchable(FIELDNAME)
,该字段的值将显示在SearchableText
中。在Archetypes中,您可以通过向字段定义添加searchable=True
来获得相同的功能。
collective.dexteritytextindexer
还可以通过注册IDynamicTextIndexExtender
适配器来手动扩展 searchableText。它使用适配器中的值扩展 part 1
的值。
我猜你的问题是,你错过了注册适配器:https://github.com/collective/collective.dexteritytextindexer#extending-indexed-data
示例:
<adapter
factory=".yourbehavior.MySearchableTextExtender"
provides="collective.dexteritytextindexer.IDynamicTextIndexExtender"
name="IMyBehavior"
/>
这是一个有效的例子:
此代码使用其子项的searchableText扩展容器的SearchableText
。
IDynamicTextIndexExtender适配器: https://github.com/4teamwork/ftw.simplelayout/blob/a7d631de3984b8c1747506b9411045fdf83bc908/ftw/simplelayout/indexer.py
最重要的部分 - 测试实施: https://github.com/4teamwork/ftw.simplelayout/blob/a7d631de3984b8c1747506b9411045fdf83bc908/ftw/simplelayout/tests/test_indexer.py#L31