eZ Publish勉強会5月「eZ Find」
-
Upload
ericsagnes -
Category
Technology
-
view
591 -
download
3
Transcript of eZ Publish勉強会5月「eZ Find」
eZ Publish2013年5月勉強会「eZ Findの紹介」
eZ Findとは
● eZ Publishの公式エクステンション
● 検索エンジン機能を提供
● Solrをバックエンドで利用する
eZ Findの特徴
● 日本語インデクシングと検索● ハイパーフォーマンス● ファセット(絞り込み)● 検索結果ブースト(ソート)● スポンサーリンク
● 複数eZ Publishコンテンツレポジトリを検索
● 外部レポジトリをインデクシング
● Solrを別サーバで運営できる
● カスタムなインデクシングタスクプラグイン
eZ Find構造
eZ Publish
eZ Find SolrREST API
インデクシング
フェッチ
eZ Findの構造
● extension/ezfind に入っています
● extension/ezfind/java にSolr一式が入っています
● フェッチファンクションを提供しますfetch('ezfind','search', …
● インデクシングスクリプトを提供しますbin/php/updatesearchindexsolr.php
eZ Findのセットアップ
● settings/override/site.iniの有効エクステンションリストにezfindを追加
● extension/ezfind/sql/で必要なテーブルを作成
● Solrを起動する
– extension/ezfind/java フォルダーへ移動
– java -Dezfind -jar start.jar● コンテンツをインデクシングします
– php extension/ezfind/bin/php/updatesearchindexsolr.php -s 管理画面サイトアクセス
eZ Findの日本語対応
● extension/ezfind/java/solr/conf/schema.xml を修正必要
● <fieldType name="text" class="solr.TextField" を下記の様に差し替える <fieldType name="text" class="solr.TextField"> <analyzer> <tokenizer class="solr.CJKTokenizerFactory"/> </analyzer> </fieldType>
eZ Findのセットアップ
● schema.xmlは必要に応じて編集できます
● tokenizer、analizer、filterを各フィールド定義に設定できます
● ezfind.iniとsolr.iniに細かい設定もできます
eZ Findの検索結果
eZ Findの検索結果
● ファセットでコンテンツ絞り込み(複数同時対応)
● 各結果の関連性%表示
● 複雑クエリーの対応
– AND,OR,+,-,*など
● 普通のテンプレートなので、簡単にカスタマイズや変更できます
Solrの管理画面
● デフォルトではlocalhost:8983/solr/admin からアクセスできます
● Solrの情報を確認できます
● クエリーを試す事もできます
● デバッグにも役立つ!
Solrの管理画面
eZ Publishの管理画面
● スポンサー結果を管理できます
eZ Findとコンテンツレポジトリ
eZ Publish
コンテンツレポジトリ(MySQL)
インデックスレポジトリ(Solr)
eZ Findとコンテンツレポジトリ
● インデックスレポジトリドキュメントベース(NoSQL)
● インデックスレポジトリはコンテンツレポジトリとしても使えます
● eZ Publishのパーフォーマンスボトルネックはコンテンツレポジトリ(MySQL)がほとんどです
– スキーマが複雑
– フェッチファンクションのリクエストも複雑
– DBの冗長化は難しい
● インデックスレポジトリ– スキーマがシンプル(ドキュメントベース)
– JavaとSolrはハイパーフォーマンス
– 冗長化は簡単(Shard機能)
eZ Findとコンテンツレポジトリ
● そのため、本来のフェッチをeZFindのフェッチに差し替えれば、パーフォマンスを改善もできます
● フェッチオプションも増えます
● 複雑なextended_attribute_filterも必要なくなります
● パーフォーマンスが重要なサイトにはeZFindを利用するのがおすすめ
eZ Findフェッチファンクション
● extension/ezfind/doc にPDFでドキュメントされている(英語)
● fetch('ezfind', 'search', hash(オプション))は基本
● フェッチオプションがたくさん!– 複数フィールドでソート– 複数クラスで同じ属性フィルタリング
– 範囲フィルタリング
– ファセット– など
● 早い!
eZ Findフェッチファンクション
● filterパラメーター
– 'filter', 'car/color:赤'
– 'filter', 'car/make: トヨタ'
– 'filter', array( 'and', array('car/color:赤', 'car/make: トヨタ'))
– 'filter', 'event/end_date:[NOW TO NOW/DAY+30DAY]'
– 'filter', 'article/rating:[5 TO 10]'
eZ Findフェッチファンクション
● 結果はハッシュオブジェクト
– SearchResult: 結果配列
– SearchCount: 結果の件数(リミット対象外)
– StopWordArray: 検索対象外言葉の配列
– SearchExtras:ファセット情報などのハッシュ
● list_countは必要ない!
● SearchResultの配列はeZContentObjectTreeNodeではなくてeZFindResultNodeであります
eZ Findカスタムインデクシング
● カスタムインデクシング機能を使って、eZ Publishのオブジェクトにないフィールドを検索インデクスに追加できる
● 例:独自外部テーブルの値をインデクスにいれて、その値でソートまたフィルタリング
eZ FindとeZ Tika
● eZ TikaはApache tikaと連携するエクステンション
● TikaはPDF、オフィースファイルなどのバイナリファイルの中身を分析するツール
● eZ Findと一緒に使えば、バイナリーファイルの中身を検索できます
eZ Find:その他の機能
● 検索結果ブースト:特別な条件で関連性を上げる
● マルチサイト検索
● 検索オートコンプリート
● 距離検索:ある距離以内で結果絞り込む、近い結果をブースト
eZ Find:裏ワザ
● ソートより、ブーストを利用する– ブーストの方が細かい設定でききる– 組み合わせもできます
● 複雑なフェッチやページビューの高いコンテンツにezfindのフェッチを利用する
– パーフォーマンスがあがる
● extended_attribute_filterを利用する前にeZFindで実装試した方がいい
– extended_attribute_filterはいろいろな問題をもっている
– SQL機能で制限されます
eZ Find:まとめ
● パーフォーマンス面と機能面でプロ級なエンジン
● 日本語対応
● 冗長化できる
● 拡張性あります
● コンテンツレポジトリとして利用も可能
リンク
● 公式ドキュメンテーション
– http://doc.ez.no/Extensions/eZ-Publish-extensions/eZ-Find
● チュートリアル
– http://share.ez.no/learn/ez-publish/advanced-development-with-ez-find-part-1-datatypes-in-solr-and-ez-find
– http://share.ez.no/learn/ez-publish/advanced-development-with-ez-find-part-2-indexing-additional-fields-in-solr
– http://share.ez.no/learn/ez-publish/advanced-development-with-ez-find-part-3-leveraging-the-solr-syntax
– http://share.ez.no/learn/ez-publish/ez-find-demystified-installing-and-configuring-a-multi-core-solr-ez-find-2.6-instance-with-ez-tika
● Solr
– http://lucene.apache.org/solr/
– http://lucene.apache.org/core/old_versioned_docs/versions/2_9_1/queryparsersyntax.html
ご清聴ありがとうございました!