eZ Publish勉強会5月「eZ Find」

26
eZ Publish2013年5月勉強会 eZ Findの紹介」

Transcript of eZ Publish勉強会5月「eZ Find」

Page 1: eZ Publish勉強会5月「eZ Find」

eZ Publish2013年5月勉強会「eZ Findの紹介」

Page 2: eZ Publish勉強会5月「eZ Find」

eZ Findとは

● eZ Publishの公式エクステンション

● 検索エンジン機能を提供

● Solrをバックエンドで利用する

Page 3: eZ Publish勉強会5月「eZ Find」

eZ Findの特徴

● 日本語インデクシングと検索● ハイパーフォーマンス● ファセット(絞り込み)● 検索結果ブースト(ソート)● スポンサーリンク

● 複数eZ Publishコンテンツレポジトリを検索

● 外部レポジトリをインデクシング

● Solrを別サーバで運営できる

● カスタムなインデクシングタスクプラグイン

Page 4: eZ Publish勉強会5月「eZ Find」

eZ Find構造

eZ Publish

eZ Find SolrREST API

インデクシング

フェッチ

Page 5: eZ Publish勉強会5月「eZ Find」

eZ Findの構造

● extension/ezfind に入っています

● extension/ezfind/java にSolr一式が入っています

● フェッチファンクションを提供しますfetch('ezfind','search', …

● インデクシングスクリプトを提供しますbin/php/updatesearchindexsolr.php

Page 6: eZ Publish勉強会5月「eZ Find」

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 管理画面サイトアクセス

Page 7: eZ Publish勉強会5月「eZ Find」

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>

Page 8: eZ Publish勉強会5月「eZ Find」

eZ Findのセットアップ

● schema.xmlは必要に応じて編集できます

● tokenizer、analizer、filterを各フィールド定義に設定できます

● ezfind.iniとsolr.iniに細かい設定もできます

Page 9: eZ Publish勉強会5月「eZ Find」

eZ Findの検索結果

Page 10: eZ Publish勉強会5月「eZ Find」

eZ Findの検索結果

● ファセットでコンテンツ絞り込み(複数同時対応)

● 各結果の関連性%表示

● 複雑クエリーの対応

– AND,OR,+,-,*など

● 普通のテンプレートなので、簡単にカスタマイズや変更できます

Page 11: eZ Publish勉強会5月「eZ Find」

Solrの管理画面

● デフォルトではlocalhost:8983/solr/admin からアクセスできます

● Solrの情報を確認できます

● クエリーを試す事もできます

● デバッグにも役立つ!

Page 12: eZ Publish勉強会5月「eZ Find」

Solrの管理画面

Page 13: eZ Publish勉強会5月「eZ Find」

eZ Publishの管理画面

● スポンサー結果を管理できます

Page 14: eZ Publish勉強会5月「eZ Find」

eZ Findとコンテンツレポジトリ

eZ Publish

コンテンツレポジトリ(MySQL)

インデックスレポジトリ(Solr)

Page 15: eZ Publish勉強会5月「eZ Find」

eZ Findとコンテンツレポジトリ

● インデックスレポジトリドキュメントベース(NoSQL)

● インデックスレポジトリはコンテンツレポジトリとしても使えます

● eZ Publishのパーフォーマンスボトルネックはコンテンツレポジトリ(MySQL)がほとんどです

– スキーマが複雑

– フェッチファンクションのリクエストも複雑

– DBの冗長化は難しい

● インデックスレポジトリ– スキーマがシンプル(ドキュメントベース)

– JavaとSolrはハイパーフォーマンス

– 冗長化は簡単(Shard機能)

Page 16: eZ Publish勉強会5月「eZ Find」

eZ Findとコンテンツレポジトリ

● そのため、本来のフェッチをeZFindのフェッチに差し替えれば、パーフォマンスを改善もできます

● フェッチオプションも増えます

● 複雑なextended_attribute_filterも必要なくなります

● パーフォーマンスが重要なサイトにはeZFindを利用するのがおすすめ

Page 17: eZ Publish勉強会5月「eZ Find」

eZ Findフェッチファンクション

● extension/ezfind/doc にPDFでドキュメントされている(英語)

● fetch('ezfind', 'search', hash(オプション))は基本

● フェッチオプションがたくさん!– 複数フィールドでソート– 複数クラスで同じ属性フィルタリング

– 範囲フィルタリング

– ファセット– など

● 早い!

Page 18: eZ Publish勉強会5月「eZ Find」

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]'

Page 19: eZ Publish勉強会5月「eZ Find」

eZ Findフェッチファンクション

● 結果はハッシュオブジェクト

– SearchResult: 結果配列

– SearchCount: 結果の件数(リミット対象外)

– StopWordArray: 検索対象外言葉の配列

– SearchExtras:ファセット情報などのハッシュ

● list_countは必要ない!

● SearchResultの配列はeZContentObjectTreeNodeではなくてeZFindResultNodeであります

Page 20: eZ Publish勉強会5月「eZ Find」

eZ Findカスタムインデクシング

● カスタムインデクシング機能を使って、eZ Publishのオブジェクトにないフィールドを検索インデクスに追加できる

● 例:独自外部テーブルの値をインデクスにいれて、その値でソートまたフィルタリング

Page 21: eZ Publish勉強会5月「eZ Find」

eZ FindとeZ Tika

● eZ TikaはApache tikaと連携するエクステンション

● TikaはPDF、オフィースファイルなどのバイナリファイルの中身を分析するツール

● eZ Findと一緒に使えば、バイナリーファイルの中身を検索できます

Page 22: eZ Publish勉強会5月「eZ Find」

eZ Find:その他の機能

● 検索結果ブースト:特別な条件で関連性を上げる

● マルチサイト検索

● 検索オートコンプリート

● 距離検索:ある距離以内で結果絞り込む、近い結果をブースト

Page 23: eZ Publish勉強会5月「eZ Find」

eZ Find:裏ワザ

● ソートより、ブーストを利用する– ブーストの方が細かい設定でききる– 組み合わせもできます

● 複雑なフェッチやページビューの高いコンテンツにezfindのフェッチを利用する

– パーフォーマンスがあがる

● extended_attribute_filterを利用する前にeZFindで実装試した方がいい

– extended_attribute_filterはいろいろな問題をもっている

– SQL機能で制限されます

Page 24: eZ Publish勉強会5月「eZ Find」

eZ Find:まとめ

● パーフォーマンス面と機能面でプロ級なエンジン

● 日本語対応

● 冗長化できる

● 拡張性あります

● コンテンツレポジトリとして利用も可能

Page 25: eZ Publish勉強会5月「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

Page 26: eZ Publish勉強会5月「eZ Find」

ご清聴ありがとうございました!