2011-09-19 40 views
3

我有很多敏捷內容類型,其中一些只是容器,只剩下標題和說明(從plone.app.dexterity.behaviors.metadata.IBasic行爲)。標題和說明沒有索引與collective.dexteritytextindexer

我可以通過搜索標題或描述內的文字找到它們。

但對於一些複雜的內容類型,我使用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列中的內容,因此結果不顯示它們。

任何想法,我缺少的是什麼?

乾杯,

回答

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

這個問題可能是該場從IBASIC或IDublineCore行爲而不是來自你的架構。雖然我不知道collective.dexteritytextindexer知道如何解決這個問題。

另一種選擇是使用plone.indexer並創建自己的SearchableText索引器,該索引器返回「%s%s%s」%(context.title,context.description,context.long_desc,)。有關詳細信息,請參閱敏捷文檔。

+0

是的,它來自IBasic的行爲。當然,我會看看plone.indexer。謝謝! – gforcada

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 
+1

我看到你已經做了一個pull請求來解決文檔中的這個錯誤,並且它被合併了。謝謝! – maurits