第2回solr勉強会 マピオン事例
DESCRIPTION
第2回Solr勉強会 マピオンの資料です。TRANSCRIPT
Solr1.3 から Solr1.4 へ移行
~マピオンの場合~
株式会社データ・コム・ナレッジ坂田 敏朗
はじめに• 対象者
– エンジニア。ちょっとは Solr かじった。 それ以外の方、「 Apache Solr 入門」を読み
ましょう• なぜ 1.4 にしたいのか?
– いつの間にかサーバが増えてしまった。• クローラー用だとか法人向け用だとか。。。
– 1.4 にすればパフォーマンス上がりそうだし台数減らせるんじゃねぇ?
• 同時アクセスが多い場合のパフォーマンスがいい。
パフォーマンス比較
※ 本番と同じ環境を用意できなかったので仮想サーバで比較
緯度経度検索&同時アクセスが多い場合に、顕著に違いが現れる
スキーマ• integer フィールドを pint へ変更• 緯度 / 経度フィールドを tdouble へ変更
– 1.3 の時はただの double
• dynamicField : name=“_local*” を追加– lucene-spatial 用
Tokenizer
• TokenizerFactory で作った Tokenizer は使いまわすように変更されている。– Factory 側で処理してた部分が 1 回しか呼ば
れなくなったので修正
lucene-spatial
• org.apache.lucene.spatial パッケージ• lucene-spatial-2.9.1.jar
• https://locallucene.svn.sourceforge.net/svnroot/locallucene からチェックアウトしたSolr コンポーネントを使用
• 距離はやっぱりマイル。。。– マイル - メートル変換– 日本測地系 - 世界測地系変換
solrconfig.xml <updateRequestProcessorChain> <processor class="jp.co.mapion.solr.update.LocalUpdateProcessorFactory"> <str name="latField">lat</str> <str name="lngField">lon</str> <int name="startTier">9</int> <int name="endTier">17</int> </processor> <processor class="solr.RunUpdateProcessorFactory" /> <processor class="solr.LogUpdateProcessorFactory" /> </updateRequestProcessorChain>
<searchComponent name="localsolr" class="jp.co.mapion.solr.component.LocalSolrQueryComponent"> <str name="latField">lat</str> <str name="lngField">lon</str> <str name="tierPrefix">_localTier</str> <str name="distanceField">distance</str></searchComponent>
<requestHandler name="/local" class="org.apache.solr.handler.component.SearchHandler"> <arr name="components"> <str>localsolr</str> <str>facet</str> </arr> <lst name="defaults"> <str name="echoParams">explicit</str> <str name="sort">distance asc</str> </lst></requestHandler>
データ更新
検索用コンポーネント
検索用ハンドラー
データ・インポート・ハンドラー
• deltaImportQuery の追加– deltaQuery と一緒に使う
• deltaQuery や deletedPkQuery も transformer が呼ばれる– 要らないと思うんですが。。。
• フィールドの大文字/小文字を区別しなくなった– これ、意外と痛い。。。
チューニング• Solr キャッシュを無効化
– 距離を計算した結果を DistanceFilter に一時的に保存しているが、そのために FULL GCじゃないと解放されない。
• Java オプション– メモリーリーク疑惑があったが、結局 Java
オプションだった。。。• Solaris ZFS
– より積極的に使う。
制限• ○ 分散検索時のファセットソートができ
ない制限がなくなった
• △ 緯度経度検索で指定できる距離に制限がある– 23950m ( 事実上、それほど問題ではない )
どのくらいサーバを削減できたか?
実はまだ移行できてません !!
• メモリーリーク疑惑があって、原因追求に時間がかかった。
• Solr 使っている箇所が多く、検証に時間がかかった。
• 検証の結果、問題もいつくか発見しその対応にも時間がかかった。
最後に• なうまぴおん も Solr
使ってます。
http://now.mapion.co.jp/