跳转到主要内容

为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')

titledescriptionplone.app.dexterityIBasic 行为上默认标记为可搜索。对于标记为不再可搜索,有一个实用函数

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)

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

  • 初始发布

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定要选择哪个,请了解更多关于安装软件包的信息。

源分布

由以下组织支持