Mapion マピオンラボ セミナー/勉強会 第2回Solr勉強会 資料公開しました
坂田です。
第2回Solr勉強会 でマピオンの事例をしゃべってきました。
その時の資料です。
<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>
コメント
第2回Solr勉強会 でマピオンの事例をしゃべってきました。
その時の資料です。
1. Solr1.3 から Solr1.4 へ移行
~マピオンの場合~
2. はじめに
* 対象者
o エンジニア。ちょっとは Solr かじった。
o それ以外の方、「 Apache Solr 入門 」を読みましょう
* なぜ 1.4 にしたいのか?
o いつの間にかサーバが増えてしまった。
+ クローラー用だとか法人向け用だとか。。。
o 1.4 にすればパフォーマンス上がりそうだし台数減らせるんじゃねぇ?
+ 同時アクセスが多い場合のパフォーマンスがいい。
3. パフォーマンス比較
※ 本番と同じ環境を用意できなかったので仮想サーバで比較
緯度経度検索&同時アクセスが多い場合に、顕著に違いが現れる
4. スキーマ
* integer フィールドを pint へ変更
* 緯度 / 経度フィールドを tdouble へ変更
o 1.3 の時はただの double
* dynamicField : name="_local*" を追加
o lucene-spatial 用
5. Tokenizer
* TokenizerFactory で作った Tokenizer は使いまわすように変更されている。
o Factory 側で処理してた部分が 1 回しか呼ばれなくなったので修正
6. lucene-spatial
* org.apache.lucene.spatial パッケージ
* lucene-spatial-2.9.1.jar
* https://locallucene.svn.sourceforge.net/svnroot/locallucene から
チェックアウトした Solr コンポーネントを使用
* 距離はやっぱりマイル。。。
o マイル - メートル変換
o 日本測地系 - 世界測地系変換
7. 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>
8. データ・インポート・ハンドラー
* deltaImportQuery の追加
o deltaQuery と一緒に使う
* deltaQuery や deletedPkQuery も transformer が呼ばれる
o 要らないと思うんですが。。。
* フィールドの大文字/小文字を区別しなくなった
o これ、意外と痛い。。。
9. チューニング
* Solr キャッシュを無効化
o 距離を計算した結果を DistanceFilter に一時的に保存しているが、
そのために FULL GC じゃないと解放されない。
* Java オプション
o メモリーリーク疑惑があったが、結局 Java オプションだった。。。
* Solaris ZFS
o より積極的に使う。
10. 制限
* ○ 分散検索時のファセットソートができない制限がなくなった
* △ 緯度経度検索で指定できる距離に制限がある
o 23950m (事実上、それほど問題ではない)
11. どのくらいサーバを削減できたか?
* 実はまだ移行できてません !!
* メモリーリーク疑惑があって、原因追求に時間がかかった。
* Solr 使っている箇所が多く、検証に時間がかかった。
* 検証の結果、問題もいつくか発見しその対応にも時間がかかった。
12. 最後に
* なうまぴおん も Solr 使ってます。
* http://now.mapion.co.jp/
コメント
- Fess
- 「5分で構築できるか?」ということで、本当にセッション中に作った。
- モバイルの3キャリア対応はいい。結構面倒ですから。
- ブラウザでアクセスする管理画面でほとんど設定できるのもラクそう。
- ECナビさん
- とにかくioDriveすごすぎ (・∀・)
ほし~、ほし~よ~、とここで叫んでみる。買ってくれるかも。このエントリーを公開する前に購入決定! - 検索用サーバー4台 を 2台に減らしたのはすごい。やっぱioDriveさまさま。
- Solr1.4、容赦しない。 うっし、かかってこいや!
- Solr@twitter検索
- 2.4億件。すごい。
- インスタンス構成、工夫している。参考になりますな。
- 起動オプション。ほんと最適なオプションが知りたい。。。
- タギング。私も研究中。 関連検索などに使いたい。
- 新刊「Apache Solr入門」のご紹介
- 武田さん、一銭もお金入らないんですね。。。(´・ω・`)
- SQLライクなインターフェース、早くリリースしちゃってください。
- 懇親会
- Amebaさん、次回は「AmebaSearch」のこと話してくださいね。 私は個人的に話をいっぱい聞かせてもらいましたが。
- CCCさん、Solrで「TSUTAYA DISCAS」の検索良くしてください。一ユーザーとしてのお願い(b´∀`)
- ECナビさん、お酒飲み放題。ご馳走様でした。

-
この記事のトラックバックURLhttp://labs.mapion.co.jp/mtos/mt-tb.cgi/46





