Solrと全文検索
RDBは検索に向かない
前方一致でしかインデックスが使用できない
DBMSはフルテキストインデックスを作成できるプラグインを追加
Oracle Text
SQL Server フルテキストインデックス
MySQL フルテキストインデックス
DBメーカー意外の全文検索エンジン
eAccela Bizesearchなども出てきたが商用で、ライセンスが高かった
Solr
1.比較的低いハードルでも動作する
2.HTTPでの要求と応募
3.レプリケーション機能
4.分散検索機能
5.DIHでRDBからデータインポート
6.ファセット検索 ※動的なタグ付け
7.トークン方式の選択 (n-gram,形態素解析)
8.フィルタ機能(シノニム)
Solrの構成
1.Solrに対してHTTPリクエストで検索、HTTPレスポンスで結果を出力
2.インデックス登録 post,jarでHTTPリクエストから定期的に登録
3.DIHを使いDBから定期的に登録
設定ファイルの編集
重要なのは3つ
1.$SOLRHOME/solr.xml
マルチコア設定を行う
2.$SOLRHOME/
各種リクエストハンドラの設定
3.$SOLRHOME/
このCoreのスキーマ設定(テーブル定義のようなもの)を定義するファイル
トークナイザー
文章をどのように切り分けてインデックス/検索するかを決定するもの
1.N-gram
1.固有名詞に強い
2.辞書のメンテナンス不要
3.ノイズが入りやすい
N=1 は uni-gram N=2 bi-gram N=3 tri-gram
2.形態素解析
1.自然言語に強い
2.固有名詞に弱い
※トークナイザー
WhitepsaceTokenizerFactory
Charフィルタ
トークン化前にかけられるフィルタ
HTMLなどを取り除く
N-gramフィルタ
NgramTokenizerのバグに有効
Synonymフィルタ
トークン化されたものを指定したものに変換してしまうフィルタ
Solrの動作確認
cd \solr\example
java -jar ./start.jar
DIH
DataImportHandler
JDBC経由でインデックスを登録する
①テーブル作成
②DIH用のコンフィグを作成 data-config.xml
/var/lib/tomcat6/solr/conf
vim data-config.xml
③DIH実行
※フルインポート
http://ip:8080/solr/dataimport?command=full-import
インデックス作成時の負荷軽減
インデックス作成をMasterに行わせて
参照はSlaveにまかせる
solrはレプリケーション機能を持っている