Your SlideShare is downloading. ×
マピオン様におけるLucene solrの実装
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

マピオン様におけるLucene solrの実装

6,274
views

Published on

「Lucene/Solrが切り拓く新たな世界 …

「Lucene/Solrが切り拓く新たな世界
~Lucene/SolrとHadoopを使った応用事例~」
での資料です。

Published in: Technology

0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,274
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
0
Comments
0
Likes
9
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Lucene/Solr が切り拓く新たな世界 ~ Lucene/Solr と Hadoop を使った応用事例~ マピオン様における Lucene/Solr の実装 株式会社データ・コム・ナレッジ 坂田 敏朗 2011/8/26
  • 2. すこしだけ会社紹介
  • 3.
    • 株式会社データ・コム・ナレッジ
    ぶっちゃけ小さい会社ですが、一生懸命お客様のために頑張ってる会社です。 Lucene / Solr のコンサルティング もやってます。 2004 年からマピオン様システム開発に参画。
  • 4. マピオン様の 検索要件
  • 5.
    • 空間検索 ( 緯度経度 ) ができること
    • 大量アクセスに耐えること ( パフォーマンス )
    • ローカル検索ができること
    •   ->場所☓キーワードによる検索
    •   例) 「渋谷」「カレー」で
    •     渋谷周辺のカレー屋を検索
  • 6. Lucene/Solr 導入の経緯
  • 7. 2009 年 ORACLE 地図のフリースクロール化 2007 年 ~ 2004 年 フリーキーワード検索 電話帳データ投入 PV 増大 ORACLE Spatial MySQL Spatial FAST Lucene/Solr データ: 10 万件 データ:~ 100 万件 データ: 100 万件~ データ: 100 万件~ データ: 1000 万件~
  • 8.
    • FAST 、ライセンス代高すぎ
    • ライセンス代をケチると、性能を制限される -> 10 クエリー/ sec
    • RDB 、データ量が 1000 万件近くになると 空間検索のパフォーマンスが厳しい
    • CPU を積んでも、1クエリーあたり1 CPU しか使わないので限界
  • 9. さまざまな問題を解決してくれたのが 「 Lucene/Solr 」
    • オープンソースでライセンス代がかからない
    • 分散検索によってスケールアウトできる
    • ソースコードが公開されているのでカスタマイズも可能
  • 10. システム構成
  • 11. ロードバランサー Solr Solr Solr ロードバランサー Solr Solr Solr Solr Solr RDB Broker インデックスの実体はなく、 Searcher へ分散検索する。 また、ローカル検索の機能を実装している。 Searcher 分割されたインデックスを持ち、実際の検索処理を行う。 Indexer RDB からデータをインポートしインデックス化する。 DataImportHandler レプリケーション Distributed Search Lucene/Solr 3 層構成
  • 12. カスタマイズ
  • 13. Lucene/Solr とはいえ、全ての要件を満たしているわけではなかった。。。 オープンソースなので 自分たちで改造しよう!
  • 14. 空間検索
  • 15. 導入当初のバージョンは 1.3 。まだ空間検索が実装されていない。 バージョン 1.4 になっても Lucene レベルで実装されてはいたが、 Solr のコンポーネントとしての実装はまだ。 3.1 でようやく Solr のコンポーネントとして実装された。
  • 16. Solr1.3 のときは 独自に Lucene の Filter を作成したり、インデックスファイルを操作して実装。 検索範囲に隣接する短形で絞り込む 絞り込んだデータに対して距離を計算 指定した距離以上のデータをなくす ※ 計算した距離は絞り込みだけではなく ソート用としても再利用  500m
  • 17. Solr1.4 のときは lucene-spatial を利用。ただし問題が。。。 距離の単位がマイル ->メートルへの変換が必要 ある形範囲が検索できない ->日本の緯度経度では正しく検索できない   ->どうしたか? 経度を -200 にして、北米の緯度に近いものにして計算
  • 18. ローカル検索
  • 19. キーワードから 場所 を特定することはできない。
    • 2つのローカル検索を実装
    • 2 BOX 検索   q= キーワード & near= 場所   -> near パラメーターで場所を特定して空間検索に    切り替える
    • 1 BOX 検索   q= キーワード 場所 & geo=1   -> q パラメーターの中から場所に関するキーワードを    見つけて空間検索に切り替える
  • 20. トークナイザー
  • 21. 検索漏れ、辞書メンテナンス 負荷を考えて 基本的に N-GRAM 方式。 ただし、住所検索に関しては 検索ノイズ を軽減するためにトークナイザーを自作。 ->京都府問題  「京都府」で検索すると「東京都府中市」が  ヒットしてしまう。  ->形態素解析+ N-GRAM    形態素解析し3文字以上の場合は     N-GRAM でさらに分割
  • 22. チューニング
  • 23. 当初は思ったほどのパフォーマンスがでなかった。 原因を見つけながら様々な施策を施す。
    • Solr のキャッシュを無効化  緯度経度で検索する場合、キャッシュのヒット率が悪かった。  メモリを他に割り振るために思い切って無効化。
    • Java 起動オプション   Java の FullGC が頻発することによってパフォーマンスが  でていなかった。 Java の起動オプションを調整して解決。
    • ZFS の積極利用  メモリをある程度節約しつつ、その分を ZFS に割り当て  インデックスファイルへの I/O を軽減。
    • ファイルオープン数   Solaris のデフォルト値が 256 だった。  明らかに足りないので 1024 に設定を変更。
  • 24. おわりに
  • 25. Lucene/Solr を早期に導入したことによって、苦労はあった。 ( オープンソースにはつきもの ) ただし、問題を解決していく過程においてエンジニアのスキルアップ、チームワークが良くなっていった。 また、オープンソース導入によって会社の枠を超えての交流も盛んになった。