機能 >

検索フィールドマッピング

概要

  • Compass (with Lucene)を利用した全文検索サイト構築のためのフレームワークです。
  • iBATISを利用することにより、データベースリソースのインデックス作成をサポートします。

標準ドキュメントエンティティ

  • この標準エンティティのプロパティに、データベースリソース等のフィールドをマップすることにより、異なるリソース間の串刺し検索を容易に実現できます。
  • 太字は、設定が推奨されるプロパティ。
    No.DCMI*1プロパティ説明備考
    ドキュメントデータ
    1-localIdentifierドキュメントのローカルな識別子OSEM*2でマッピング
    2*titleドキュメントの見出しOSEMでマッピング
    3*creator著者、作成者OSEMでマッピング
    4*date最終更新日時OSEMでマッピング
    5-contentコンテンツOSEMでマッピング
    6*subject主題オプション
    7*description概要説明オプション
    メタデータ
    8*identifierドキュメントのグローバルな識別子(URI)基本的に、buildIdentifier()を実装し、
    resourceContextとlocalIdentifierで構築。
    9-resourceAliasリソースのエイリアスOSEMで定数設定
    10-resourceContextaliasに対応したURIのコンテクスト文字列CompassContext?のSpring設定でマッピング
    11-provider検索・インデックスプロバイダOSEMで定数設定
    12-providerUrl上記プロバイダのURLOSEMで定数設定
    13*rights著作権表示OSEMで定数設定
    14*typeドキュメントのタイプOSEMで定数設定
    15-sizeドキュメントサイズcontentから自動計算
    16-score検索時のスコアフレームワークが自動設定
    17-fragment検索時のハイライトフラグメントフレームワークが自動設定*3
    18-fragments検索時のハイライトフラグメント(複数リソース用)フレームワークが自動設定*4、ver. 0.9.3以降
    19*contributorオプション
    20*coverageオプション
    21*formatオプション
    22*languageオプション
    23*publisherオプション
    24*relationオプション

インデックス作成の設定方法

データベースリソースの場合

  • エンティティクラスを用意します。
    • 最も簡単な方法は、フレームワークの SearchableGenericEntity? を継承して、buildIdentifier()メソッドをオーバライドします。
    • または、ジェネリックエンティティを利用します。tracなどについては、一部エンティティクラスを提供しています。
    • なお、フレームワークの Searchable インタフェイスを実装しているクラスであれば何でも構いません。
  • iBATISでO/Rマッピングを設定します(オブジェクトとRDBレコードのマッピング)。
    • 別名(as)で、エンティティのプロパティ名を指定します。
      1. <sqlMap namespace="trac">
      2.  
      3.     <typeAlias alias="TracWikiBean"
      4.         type="jp.sourceforge.webframe.compass.entity.TracWikiBean" />
      5.  
      6. <!-- ====================== definitions for WIKI table ===================== -->
      7.     <select id="getWikis" resultClass="TracWikiBean">
      8.         SELECT
      9.             name as id,
      10.             name as title,
      11.             author as author,
      12.             time as lastModified,
      13.             text as content
      14.         FROM
      15.             wiki
      16.         WHERE
      17.             name || version
      18.             in (select name || max(version) from wiki group by name)
      19.     </select>
      20. </sqlMap>
  • OSEMの設定をします(オブジェクトと検索フィールドのマッピング)。
    • クラスに適切な alias を設定します。
    • クラスの all 属性(自動allフィールド)を false にします。
    • デフォルトで検索対象とするプロパティのメタデータに all を設定します。
    • <constant/>エレメントに、検索に使用できるドキュメントのタイプを指定しておくとよいでしょう。
    • 将来のロールベースのフィルタリングのために、<constant/>エレメントに、role を指定しておくとよいでしょう。
      1. <compass-core-mapping package="jp.sourceforge.webframe.blankapp.entity">
      2.    <class name="MyTracWikiBean" alias="myTracWiki" all="false">
      3.        <id name="localIdentifier"/>
      4.  
      5.        <constant>
      6.            <meta-data store="yes" index="un_tokenized">provider</meta-data>
      7.            <meta-data-value>webframe</meta-data-value>
      8.        </constant>
      9.  
      10.        <constant>
      11.            <meta-data store="yes" index="un_tokenized">providerUrl</meta-data>
      12.            <meta-data-value>http://webframe.sourceforge.jp/</meta-data-value>
      13.        </constant>
      14.  
      15.        <constant>
      16.            <meta-data store="yes" index="un_tokenized">type</meta-data>
      17.            <meta-data-value>trac</meta-data-value>
      18.            <meta-data-value>wiki</meta-data-value>
      19.        </constant>
      20.  
      21.        <constant>
      22.            <meta-data store="yes" index="un_tokenized">role</meta-data>
      23.            <meta-data-value>everyone</meta-data-value>
      24.        </constant>
      25.  
      26.        <constant>
      27.            <meta-data store="yes" index="un_tokenized">rights</meta-data>
      28.            <meta-data-value>creators</meta-data-value>
      29.        </constant>
      30.  
      31.        <property name="title">
      32.            <meta-data store="yes" index="tokenized">title</meta-data>
      33.        </property>
      34.  
      35.        <property name="creator">
      36.            <meta-data store="yes" index="un_tokenized">creator</meta-data>
      37.        </property>
      38.  
      39.        <property name="date">
      40.            <meta-data store="yes" index="no">date</meta-data>
      41.        </property>
      42.  
      43.        <property name="content">
      44.            <meta-data store="compress" index="tokenized">content</meta-data>
      45.            <meta-data store="compress" index="tokenized">all</meta-data>
      46.        </property>
      47.    </class>
      48. </compass-core-mapping>

ファイルリソースの場合


*1 Dublin Core Metadata Initiative
*2 Object/Search Engine Mapping
*3 フレームワークは、自動で all と設定された最初のリソース(プロパティまたはメタデータ)のテキストを対象としてハイライトされた一つのベストフラグメント文字列をこのフィールドに格納します。したがって、最初のリソースのテキストに検索対象文字列が存在しない場合、他のリソースでマッチしていたとしても、このフィールドが null となる場合があります。より正確にすべてのフラグメントを得たい場合には、以下の fragments フィールドを使用してください。
*4 フレームワークは、自動で all と設定されたすべてのプロパティまたはメタデータのハイライトされたベストフラグメントを文字列配列としてこのフィールドに格納します。検索結果表示ページでは、このフラグメントを ... などの文字列で連結して表示するとよいでしょう。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-08-02 (日) 18:11:18 (3393d)