O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

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

Ad

Lucene/Solr が切り拓く新たな世界 ~ Lucene/Solr と Hadoop を使った応用事例~ マピオン様における Lucene/Solr の実装 株式会社データ・コム・ナレッジ 坂田 敏朗 2011/8/26

Ad

すこしだけ会社紹介

Ad

<ul><li>株式会社データ・コム・ナレッジ </li></ul>ぶっちゃけ小さい会社ですが、一生懸命お客様のために頑張ってる会社です。 Lucene / Solr のコンサルティング もやってます。 2004 年からマピオン様システム開発に...

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Carregando em…3
×

Confira estes a seguir

1 de 25 Anúncio
1 de 25 Anúncio
Anúncio

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

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

×