为dexterity内容类型提供动态可搜索的Text索引
项目描述
简介
collective.dexteritytextindexer 为dexterity内容类型提供了一个动态可搜索文本索引器。它使得将多个行为字段的索引作为可搜索文本成为可能。
用法
要启用索引器,只需将行为添加到您的内容类型的行为列表中。
在您的 profiles/default/types/YOURTYPE.xml 中添加行为
<?xml version="1.0"?> <object name="example.conference.presenter" meta_type="Dexterity FTI" xmlns:i18n="http://xml.zope.org/namespaces/i18n" i18n:domain="example.conference"> <!-- enabled behaviors --> <property name="behaviors"> <element value="collective.dexteritytextindexer.behavior.IDexterityTextIndexer" /> </property> </object>
现在您需要标记您希望在 SearchableText 中出现的字段。这可以通过指令来完成
from collective import dexteritytextindexer from plone.autoform.interfaces import IFormFieldProvider from plone.supermodel.model import Schema from zope import schema from zope.interface import alsoProvides class IMyBehavior(Schema): dexteritytextindexer.searchable('specialfield') specialfield = schema.Text(title=u'Special field') alsoProvides(IMyBehavior, IFormFieldProvider)
如果您想标记现有第三方行为中的字段,可以使用此实用函数来完成
from plone.app.dexterity.behaviors.metadata import ICategorization from collective.dexteritytextindexer.utils import searchable searchable(ICategorization, 'categorization')
title 和 description 在 plone.app.dexterity 的 IBasic 行为上默认标记为可搜索。对于标记为不再可搜索,有一个实用函数
from plone.app.dexterity.behaviors.metadata import IBasic from collective.dexteritytextindexer.utils import no_longer_searchable no_longer_searchable(IBasic, 'title')
或者,如果您将模型指定为 plone.supermodel XML 模型,您可以通过这种方式标记字段可搜索
<model xmlns="http://namespaces.plone.org/supermodel/schema" xmlns:indexer="http://namespaces.plone.org/supermodel/indexer"> <schema based-on="plone.supermodel.model.Schema"> <field name="specialfield" type="zope.schema.TextLine" indexer:searchable="true"> <title>Special field</title> </field> </schema> </model>
您的 SearchableText 索引器现在包括您在行为中的自定义字段,一旦您在内容类型中启用它,其中 IDexterityTextIndexer 行为也启用了。
注册自定义字段转换器
默认情况下,字段通过以显示模式渲染小部件并将结果转换为 text/plain 来转换为可搜索文本。但是,如果您需要以不同的方式转换自定义字段,您只需提供更具体的转换多适配器。
转换多适配器规范
- 接口:
collective.dexteritytextindexer.IDexterityTextIndexFieldConverter
- 区分器:
context, field, widget
示例
from collective.dexteritytextindexer.converters import DefaultDexterityTextIndexFieldConverter from collective.dexteritytextindexer.interfaces import IDexterityTextIndexFieldConverter from my.package.interfaces import IMyFancyField from plone.dexterity.interfaces import IDexterityContent from z3c.form.interfaces import IWidget from zope.component import adapts from zope.interface import implementer @implementer(IDexterityTextIndexFieldConverter) class CustomFieldConverter(DefaultDexterityTextIndexFieldConverter): adapts(IDexterityContent, IMyFancyField, IWidget) def convert(self): # implement your custom converter # which returns a string at the end return ''
ZCML
<configure xmlns="http://namespaces.zope.org/zope"> <adapter factory=".converters.CustomFieldConverter" /> </configure>
已经有一个适配器用于正确转换 NamedFiles。只有当 plone.namedfile 安装时才会注册。
扩展索引数据
有时您需要通过存储在字段之外的数据扩展 SearchableText。您可以通过注册一个提供额外数据的命名适配器来实现
from collective import dexteritytextindexer from zope.component import adapts from zope.interface import implementer implementer(dexteritytextindexer.IDynamicTextIndexExtender) class MySearchableTextExtender(object): adapts(IMyBehavior) def __init__(self, context): self.context = context def __call__(self): """Extend the searchable text with a custom string""" return 'some more searchable words'
ZCML
<configure xmlns="http://namespaces.zope.org/zope"> <adapter factory=".indexer.MySearchableTextExtender" name="IMyBehavior" /> </configure>
这是一个 命名 适配器!这使得可以在不同的行为接口上为同一对象注册多个扩展器。适配器的名称无关紧要,但建议使用行为名称(这可能减少冲突)。
如果您的行为有一个定义的工厂(不是属性存储),则需要定义一个标记接口,并在该标记接口上注册适配器(dexterity对象不提供不使用属性存储的行为接口)。
贡献者
(按出现顺序)
变更日志
2.4.1 (2022-03-31)
在 SearchableText 中修复了重复值。[gbastien]
修复了 Python 3 上 RichText 字段索引器的错误。[alecpm]
2.4.0 (2020-01-24)
添加行为短名“collective.dexteritytextindexer” [agitator]
2.3.0 (2019-09-27)
进行一些更新,以使构建在 travis 上再次通过,例如在 buildout 配置中添加 index/allow-hosts,将 version.cfg 引用设置为 'latest',增加 setuptools 和 zc.buildout 版本 [staeff]
更新附加组件以在 Plone 5.2 中运行,同时使用 Python 3。修复 https://github.com/collective/collective.dexteritytextindexer/issues/31 [staeff]
2.2.1 (2017-07-26)
修复了 RichText 字段索引器中当 RichText 字段的值为 None 时的错误。该错误是在 2.2.0 中引入的。[mbaechtold]
2.2.0 (2017-06-23)
添加 TupleFieldConverter,以启用对 portal catalog KeywordIndex 索引的索引。[jone, mtrebron, maurits]
提高了代码质量。[maurits]
添加了对索引 RichText 字段的能力。修复了 #23。[smcmahon]
2.1.1 (2016-11-03)
删除了 plone.directives.form 的痕迹(这隐式地添加了 grok 作为依赖项)。[gforcada]
静默 plone.behavior 警告。[gforcada]
在 setup.py 中指定兼容性,对于已测试的版本移除 unittest2 依赖项 [tomgross]
2.1.0 (2016-04-14)
添加 schemaeditor 支持 [datakurre]
2.0.2 (2016-04-07)
处理从脚本中索引。修复 https://github.com/collective/collective.dexteritytextindexer/issues/12 [gforcada]
2.0.1 (2014-01-02)
修复了将 HTML 转换为文本时的编码错误。[jone]
2.0 (2013-03-16)
放弃对 Plone 4.1 的支持。[jone]
默认将 p.a.dexterity 的 IBasic 的标题和描述标记为可搜索。[jone]
添加 no_longer_searchable 实用函数。[jone]
支持 Plone 4.3。[jone]
消除对 grok / martian 依赖项的依赖,转而使用新的 plone.supermodel 指令。#5 [jone]
1.5.1 (2013-02-20)
不要尝试将文件中的text/plain转换为文本,只需按原样索引它。[zupo]
1.5 (2012-08-16)
修复了缺少字段的问题。#3
当索引一个对象并且它的一个模式定义了可搜索的缺少字段时,记录一个错误。
确保索引同一模式下的其他现有字段正常工作。
可搜索实用函数:当字段缺失时引发AttributeError。
[jone]
在plone.supermodel XML模型中添加了标记字段为可搜索的支持。这是通过实现一个能够将相应的taggedValue序列化/反序列化为XML的IFieldMetadataHandler来完成的。[lgraf]
为标记第三方模式中的字段为可搜索添加了utils.searchable方法。[kagesenshi]
1.4.1 (2011-11-17)
在get_field_widget方法中忽略请求,以避免与字段同名请求变量的问题。[phgross]
为plone-4.1.x添加了测试构建包。[lgraf]
1.4 (2011-08-24)
添加了IntFieldConverter,它返回原始值而不是渲染方法(600000 –> 600,000)[phgross]
1.3
修复了查询标记值的问题:使用合并的辅助函数mergedTaggedValueList - 它还查询超类中的标记值。[jbaumann]
修复了html到文本转换调用:添加了源MIME类型。[jbaumann]
1.2
修复了NamedFileConverter中的数据转换。[lgraf]
1.1
由于有时字段值可能错误,因此使reindexer更健壮。[jbaumann]
在indexer中不要遍历到“视图”,这可能会在测试中引起安全问题。现在使用伪视图来启用z2模式。[jbaumann]
1.0
修复了使用IDynamicTextIndexExtender适配器时的断言错误。[jbaumann]
1.0b3
将IDynamicTextIndexExtender移动到interfaces模块。[jbaumann]
plone.namedfile现在是可选的。只有在其存在时才注册新的namedfile转换适配器。[jbaumann]
使用新引入的适配器重新实现了字段数据的转换。默认转换器仅转换显示模式下的小部件并将其转换为text/plain。[jbaumann]
修复了与plone.app.testing 4.0a3的兼容性测试:使用TEST_USER_ID而不是TEST_USER_NAME [jbaumann]
修复了在索引包含特殊字符(非ASCII字符)的列表或字典时的UnicodeError。[phgross]
1.0b2
修复了MANIFEST.in [jbaumann]
1.0b1
初始发布
项目详情
collective.dexteritytextindexer-2.4.1.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 834bd2176b5993e45f81ea7678a894a8f1281c69811e611bb9d538e1acb3bacb |
|
MD5 | 3c6f7b90cfd8f8178027b98580996c19 |
|
BLAKE2b-256 | 07a272e0bf9b443fb7292a6ca687883b5d60a85707477836fabd7ccc464eb96d |