Заголовок и описание не индексируются с помощью colle.dexteritytextindexer - PullRequest
3 голосов
/ 19 сентября 2011

У меня много типов контента Dexterity, некоторые из них являются просто контейнерами и остаются только с заголовком и описанием (из поведения plone.app.dexterity.behaviors.metadata.IBasic).

Я могу найти их, выполнив поиск по тексту внутри их заголовка или описания.

Но для некоторых сложных типов содержимого я использую коллективный.и он работает нормально, я могу найти текст в отмеченных мной полях для индексации.

Однако заголовок и описание больше не доступны для поиска.Я пробовал что-то вроде:

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,
        )
    ...

Но я не вижу содержания заголовка и описания в столбце SearchableText в portal_catalog, и поэтому результаты не показывают их.

Есть идеи, что мне не хватает?

Ура,

Ответы [ 3 ]

5 голосов
/ 27 сентября 2012

У меня почти такая же проблема.Следуя документации по 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
4 голосов
/ 19 сентября 2011

Возможно, проблема в том, что поле исходит из поведения IBasic или IDublineCore, а не из вашей схемы.Я не достаточно разбираюсь в коллективно.dexteritytextindexer, чтобы знать, как обойти эту проблему.

Другой вариант - просто использовать plone.indexer и создать собственный индексатор SearchableText, который возвращает "% s% s%s "% (context.title, context.description, context.long_desc,).Подробности смотрите в документации по Ловкости.

1 голос
/ 21 сентября 2011

Для справки я написал код:

@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")
...