Search code examples
indexingplonedexterity

Title and description aren't indexed with collective.dexteritytextindexer


I have lots of Dexterity content types, some of them are just containers and are left with just the Title and Description (from plone.app.dexterity.behaviors.metadata.IBasic behavior).

I can find them by searching the text inside their title or description.

But for some complex content types I'm using collective.dexteritytextindexer to index some more fields and it works fine, I can find the text on the fields I marked to be indexed.

However the Title and Description are no longer available for searching. I tried something like:

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

But I can't see the content of title and description on the SearchableText column in the portal_catalog, and thus the results don't show them.

Any idea what I'm missing?

Cheers,


Solution

  • As a reference this is the code I ended up writing:

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