Ploneのカタログを使う

Ploneにはカタログツールがあり、ポータルのコンテンツオブジェクトについてクエリすることができます。

これはifPeople(http://www.ifpeople.net)のPlone/Zopeトレーニングのために書かれた、Plone APIの紹介資料です(Plone 2.0と2.1に対応)。原文はEmanuel Sartor(http://www.menttes.com)によって書かれ、Natalia B. Bidartによって英訳されました。スペイン語バージョンはhttp://www.ifpeople.net/fairsource/courses/material/apiPloneで見ることができます。
Page 3 of 5.

このセクションでは searchResultsメソッドについて学びます。最初にこのツールの利用について説明し、その後によくある使い方の例を示します。

First, the use of it is going to be explained, and secondly, an example of its common usage is going to be shown.

  • searchResults(self, REQUEST=None, **kw) このメソッドはCMFCore.CatalogTool.CatalogTool クラスにあり、 ZCatalog.searchResultsメソッドを呼びます。また、検索結果をユーザのパーミッションに従って制限するように引数が渡されます。このパラメータがカタログインスタンスへのクエリを決めますが、このクエリはkeywordmapping、あるいはREQUESTオブジェクトなどによって決まります。カタログのインデクスは、キーワード名やマッピングキー、あるいはrecordオブジェクトのアトリビュートなどによって実行されます。
    • recordオブジェクトのアトリビュート
      • query: オブジェクトのシークエンス、あるいはqueryとしてindexに渡される値です。
      • operator: 検索結果のコンビネーションを指定します(デフォルトはOR)。キーワードインデクスやパスインデクスについてはANDORを、テキストインデクスについてはANDORANDNOTNEARをとります。
      • range: 検索範囲をしていします(デフォルトではoff)。クエリに大きな値を渡すような検索ではminを、逆の場合はmaxを指定するとよいでしょう。またminmaxを利用することもできます。
      • level: パスインデクスについてのみ利用します。検索を始める辞書レベルをしていします(デフォルトは0です)。

例7: IDによる降順でドキュメントをリストアップする

下記はポータルのすべてのドキュメントを降順でリストアップするスクリプトです。portal_typeによってコンテンツオブジェクトの種類を制限し、sort_onsort_orderによって順番を決めています。

results = context.portal_catalog.searchResults(sort_on="id",
                                               portal_type="Document",
                                               sort_order="reverse")
print [i.getObject().id for i in results]
return printed

Plone 2.1.1ではタイトルによって並べるために、sort_onパラメータにsortable_titleを指定することもできます。

カタログから得られた結果に対してgetObjectメソッドが呼ばれていることにも注意してください。これはカタログの検索結果がコンテンツオブジェクトそのものではないためです。ご想像の通り、getObjectメソッドが実際のコンテンツオブジェクトを返しています。

例8: textoを含むプライベートオブジェクトをリストアップする

それぞれのコンテンツオブジェクトは、そのオブジェクトに含まれるどの情報が検索可能となるかが決まっています。SearchableTextパラメータはその情報を検索するものです。またreview_stateパラメータは状態によってオブジェクトをフィルタリングします。

results = context.portal_catalog.searchResults(SearchableText="texto",
                                               review_state="private")
print [i.getObject().Title() for i in results]
return printed

例9: November, 30th, 2005以降にadminによって生成されたオブジェクトをリストアップする

下記のスクリプトはrecord objectがどのようにsearchResultsメソッドへ渡されるかを示しています。Dateパラメータは特定の日付以降に生成されたオブジェクトを、Creatorパラメータはadminユーザによって生成されたオブジェクトを選り分けています。

results = context.portal_catalog.searchResults
            (Date={"query": DateTime("2005/11/30"), "range": "min"},
             Creator="admin")
print [i.getObject().Title() for i in results]
return printed