3

私はたくさんの器用さのコンテンツタイプを持っています、それらのいくつかは単なるコンテナであり、タイトルと説明だけが残されています(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列にタイトルと説明の内容が表示されないため、結果に表示されません。

私が欠けているものはありますか?

乾杯、

4

3 に答える 3

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
于 2012-09-27T12:06:03.167 に答える
4

問題はおそらく、フィールドがスキーマからではなく、IBasicまたはIDublineCoreの動作から来ていることです。ただし、collective.dexteritytextindexerについては、これを回避する方法を十分に理解していません。

別のオプションは、plone.indexerを使用して、 "%s%s%s"%(context.title、context.description、context.long_desc、)を返す独自のSearchableTextインデクサーを作成することです。詳細については、敏捷性のドキュメントを参照してください。

于 2011-09-19T12:39:58.210 に答える
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")
于 2011-09-21T08:48:41.793 に答える