我想用计算字符串创建目录元数据。因此,在Aspeli's book和the developer manual之后,我开始创建索引器:
# indexer.py
@grok.adapter(Entry, name='bind_representation')
@indexer(Entry)
def bindIndexer(context):
print str(IBindRepresentable(context))
return str(IBindRepresentable(context))
并使用genericSetup注册索引:
<!-- profiles/default/catalog.xml -->
<?xml version="1.0"?>
<object name="portal_catalog" meta_type="Plone Catalog Tool">
<index name="bind_representation" meta_type="ZCTextIndex">
<!-- I tried with meta_type="FieldIndex" too -->
<indexed_attr value="bind_representation"/>
<!-- copied from other text metadata -->
<extra name="index_type" value="Okapi BM25 Rank"/>
<extra name="lexicon_id" value="plaintext_lexicon"/>
</index>
</object>
问题是:(1)只注册索引,而不是元数据,(2)在重新索引所有zodb之后,bind_representation仍然找不到任何索引条目,即使它们是。
引用的示例仅处理预先存在的索引,因此我不确定catalog.xml的内容。似乎根本没有调用 bindIndexer ,因为它的print语句永远不会被执行。我也将 bindIndexer 复制到了entry.py,以确保它没有被忽略,但仍然没有被忽略。
我错过了什么?
感谢。
答案 0 :(得分:1)
1-为了添加新元数据,您必须使用以下语法:
<?xml version="1.0"?>
<object name="portal_catalog" meta_type="Plone Catalog Tool">
...
<column value="bind_representation"/>
</object>
2a-您正在调整您的内容类,您应该调整您的内容界面(最有可能是IEntry)。
2b-您正在使用ZCTextIndex:该索引不会显示所有条目(即使在前一点之后),因为它基于词典。你可能应该使用它(除非你有特定的界限):
<index name="bind_representation" meta_type="FieldIndex">
<indexed_attr value="bind_representation"/>
</index>
更多信息: