第6回Solr勉強会に参加しました。(Jugemより移植)
「第6回Solr勉強会」に参加しました。 なんだかんだと第6回で、今のところ皆勤賞です。
ということで、主に自分用ですが、メモなどとったので。
概要
日時 :2011/09/12 19:00 to 21:00 定員 :110 人 会場 :株式会社 ECナビ 1.「Lucene/Solr 3.2-3.4」 by ロンウイット 関口 宏司さん ※Solr2.9.4、3.1でデグレードし、Solr3.4で修正されたバグがあります。 インデックス中にPCがシャットダウンされた場合にインデックスが壊れてしまうものあり。 Solr3.1-3.3は使用しないようにとのこと。 ○index ・IndexWriter.addDocuments(docs) 複数ドキュメントの更新が可能になった。 ※検索で話をする親子関係のNestedQuery向けの登録にも利用する。 この登録では途中でフラッシュされないため、セグメントが分割されない特徴あり。 複数だけでなく、 ・TieredMergePolicy ※Lucene3.2/Solr3.3からデフォルトになった。 新しいインデックスのマージポリシー。(amebaの開発者ブログに説明があった。) インデックスの登録順が守られていたが、このマージ処理では保証がされなくなったので注意が必要。 ・update.chain update.processorがdeprecatedに。 update.chainというパラメータに変更 ○index(cont'd) ・TwoPhaseCommit ・UniqFieldsUpdateProcessor 重複した値を削除するための機能。 UIMAでの提案から取り込まれた ○search ・group=on 検索グルーピング機能を使えるパラメータ ・{!term} クエリパーサを通さないでTermQueryをかける機能。 ・structured explanation debug=onの算出根拠を XMLタグで構造化されたExplanationが取得可能に ・ReloadCacheRequestHandler 関口さん担当。ExternalFileField インデックス外(外部ファイル)を元にFunctionQueryの情報を利用可能にできるのだが、 このファイルのリロードが可能になる。 ・Carrot2 3.5.0 アップグレード。 デモあり。Carrot2のworkbenchとか ○search(cont'd) ・hl.phraseLimit parameter FastVectorHighlighterの高速化用パラメータ。 ・{!cache=false} キャッシュを利用しないためのローカルパラメータ。fqのローカルパラメータに利用可能。 検索セッション内でキャッシュへの処理(参照・登録)をしなくなる ・BlockJoinQuery NestedDocumentQueryの名前が変更された。 (Luceneで登録されたところまで。) ○schema ・KStemFilter PoterStemmerとは別のstemmer ・ReversePathHierarchyTokenizer パスの構造化インデックスの逆バージョン ・ommitPositions="true" 指定が可能になった。 ・version 1.4 スキーマのバージョンが新しくなった。 ○admin/tools ・action=MERGEINDEXES&srcCore=coreName コア名指定可能。 ・action=UNLOAD&deleteIndex=true UNLOAD時にインデックス削除 ・action=CREATE&property.name ※ぎゃーーー。打ち込み失敗。 ○ぎゃーーーー失敗。 ○技術者大募集中!! Q&A Q:クラスタリングの日本語は大丈夫?入門には制限があると記載があったが。 A:analyzerが記載が簡単になってるかは不明 前処理をして別フィールドにメタデータ的にある程度単語で区切ったようなものを作成したほうがいい。 Q:グルーピングで、グルーピング後のファセット件数が取得可能か? A:3.4ではグループ数で表示可能。 パラメータ指定で可能。 2.「Solr@cookpad」 by @PENGUINANA_ さん ○COOKPADとは? ・レシピ投稿サイト ・105万のユーザのレシピ ・30代女性の1/2が利用 ○レシピ検索 ・PC:1307万UU、1億回強/月 ・モバイルで利用が多く、スーパの店頭などで利用? ・Androidもあるよ。 ○人気順検索(Solrですよ) ○自己紹介 ・@PNGUINANA_ ・情報可視化+検索が好き!! yats、など ○Solrはどのように利用 ・レシピ検索 ・もしかして ○Tritonnから移行 同じ検索結果になるようにして徐々に移行 ○なぜ? パフォーマンスが良い。 フィールド追加が簡単 レプリケーション->ファイルベース プロトタイピングが楽 ○Solr4 nightly(on Oracle JVM) ・マルチコア利用 ・Ruby on Railsから ○簡単な構成+説明 ・バッチからSolrへの更新をしている。 ※Analyzerを利用せず、バッチ側で分かち書き、正規化、同義語展開を行っている。 Rubyで全部かけるほうが社内に展開しやすい。 ・バッチ終了後、可能ならoptimize ※検索速度がmax20%高速になる。 ・マスタ->スレーブレプリケーションはschema.xmlもレプリケート 新規フィールド追加などはレプリケーションだけで実行できて楽。 ・アプリはMySQLとSolrのSlaveにアクセス。 Solrにはidのみ。本文はMySQLから取得 インデックスサイズを小さくできる=レプリケーション時間が短くなる オンメモリにできるため検索速度も向上 ○監視(munin) ・監視項目(コア別): クエリ:QTime/QPS キャッシュ:hit/eviction キャッシュから漏れている数をみてキャッシュサイズを定期的に変更して無駄をなくす インデックス:サイズ/docの数 運用してから重要。開始当初は気にしてるが、そのうち気にならなくなるため。 レプリケーション:所要時間 スレーブ間でのズレを検知するため。 ※コアごとに監視することで、問題点を把握しやすくしている。 ○監視(nagios) ・監視項目(コア別): サーバの基本的なヘルスチェック Solrが動いてるサーバのはなし。 レプリ:インデックスバージョンのチェック ズレが長いとメールが飛ぶ ○便利だった機能 ・DynamicField フィールドをあとから簡単に追加可能。 例:人気順のアルゴリズムの違うフィールド。検索用フィールド ・FacetQuery 絞り込み検索をクエリで記載可能。 現時点では社内向け検索機能で利用。 ※ファセットで簡単な解析もやってる。 例:鍋の季節ごとの登録件数。 ・HTTP経由で色々可能 検索の並列化 通常検索画面:3クエリを同時実行 あるプロトタイプ画面だと8クエリで実行したりしてる。 ・分散検索(Distributed Search) 簡単にsharding可能 思いクエリは4shardで投げる オーバヘッドが大きいので思いクエリにだけ利用しているらしい。 ○開発の流れ ・まずはステージングを更新 ・問題なければマスターも更新 例外: フィールド追加するだけだったら直接マスタへ 例:ファセット追加など。 ○パフォーマンスとか大丈夫? 本番で複数のバージョンを持っており、 バグっていても自動フォールバックするらしい。 価値があったらパフォーマンス向上+テスト追加 例:スニペット変更 ○気になっている機能 ・not to cache(SOLR-2429) ・SurroundQuery(Solr-2703) ・JOIN(SOLR-2272) SQLのJOINなイメージ ・BloomFilter(SOLR-1375) 単語が存在するかどうかのチェック ○Solr入門おすすめ ○おすすめ ・http://blog.sematext.com 月一で新機能が出てくる ・SolrのJIRA ・@otisg ○今後やりたいこと ・わかち書きの精度向上 ・検索セッションの分析 nDCG、クエリ分類、検索意図 ・デバイス対応 ・パーソナライズ Q&A Q:同義語は誰が集めている? A:外部辞書を利用。0件キーワードから解析して取得 単語登録も一緒。 Q:プチトマトとトマトの違いはどうやってる? A:上位、下位の概念で同義語を利用している。 本にあるよ。 Q:もしかしてはSolrの機能? A:Solrではない。訂正候補の単語をSolrに検索してからチェックして表示する。 Q:人気順はどういった計算をしてるんですか?計算してから登録?By 大谷 A:1フィールドに外から入れている。 Q:RubyからSolrの利用方法は?独自?ライブラリ?By 大谷 A:Rsolrを利用しており、コネクション管理にだけ利用している。 あとは、ラッパーを独自で作成。 Q:4.0を利用している理由は?なかなかチャレンジャー。By関口 A:グループクエリを利用したかったため。 実際には重くて使えていない。 今は必要ないかもと思っている。年始のバージョンを利用。いつでも入れ替え可能。 マスタスレーブ構成のsolrのバージョンアップはサービスアウトしてから入れ替える。 3. 「Solrを用いた検索システムの構築」 by データセクション株式会社 高井さん いろいろな試行錯誤について ○データセクションについて 言語処理を元にデータの解析(Twitterとかブログとか)している会社。 ・昔は自社で検索サーバを構築していた ・Luceneを利用して検索サーバを構築するように変更。 ○構成(過去?) ・Lucene+RMI 3.0から縮小で、4.0で廃止に ○SolrにするかLuceneにするか? ・いろいろ機能があるからSolr使ってみるかw ○Solr導入は1.4.1から スペック マスタ: メモリ:16G Disk:2Tx12 スレーブ: 256GのSSDを利用 JavaVMが32bit ○ひと月分を1shardにして登録 ○検証+手探り? メモリが足りない。 Solrのキャッシュを全Offに。 BOBO SolrPluginってのを利用 compressオプションも利用。 各スレーブにキューを用意して1つだけしか処理しない。(なんでだ??) ○結果 キャッシュはフィルタキャッシュのみ利用 ユーザが同じクエリを投げるのはほぼないので。 フィルタキャッシュのエントリのメモリ量の計算式(あとで資料が出てくるかなぁ。) ○問題点 ・レプリケーションでインデックスサイズの2倍の容量が必要になる。 ・レプリケーションの日時フォーマットのバグ(SOLR-1995)を踏んでしまった。 ・レプリケーション後にインデックスが消えない場合がある ○検討(1.4.1->3.2) うれしい要素 レプリケーションバグがfix 省メモリや範囲検索の高速化など かなしい要素 compressが使えなく(しかも回答してからriindexしてくれる) ○検討 余計なインデックス消す nearinfinityが出しているlucene-compressionを利用 https://github.com/nearinfinity/lucene-compression ○残った問題 facet.rangeが使えないなど。 ○じゃあ集約サーバつくっちゃえ(すごいな。) facet書き換えコンポーネントなど。 ○シャードのインデックスサイズが下がった 130GiB->90GiB これはlucene-compressionの効果 ○ここまでの変更はプラグインにて対応(この一覧いいかも) ○感想 コンポーネント化されてて、簡単に追加機能が実装可能 用途次第であまりスペック高くなくても使える。 Q&A Q:Twitterのデータのクロール方法は? A:HTMLをスクレイピングしている。publicなTLのみ。 Q:いきなりSolrに入れる?Solrの前処理は? A:SolrJを利用して前処理済みのデータを登録している。 4. 「Anuenueの紹介と最近の進捗」 by @takahi_i さん(mixi) ○自己紹介 ・NAIST出身 ・ファストサーチ ・今はmixi ○mixiとは? ○社内の緊急タスク ・内製検索エンジンをメンテナンスしやすいOSSにしたい! ->Solrを選択 Anuenueも実装 ○Anuenueの作成理由は? インデックス運用が面倒(検索(distributed search)はあるがインデックスは自前) クラスタ用のコマンドが提供されていない。 ○Anuenueが提供する機能 ・検索クラスタの簡単設定 ・クラスタ用コマンド ・もしかして機能 ○機能:Anuenueのクラスタ設定 Merger:クライアントからのクエリをMasterに分散 Master:インデックス作成側 Slave:検索用スレーブ。マスタからコピー ○クラスタの管理コマンド クラスタのコマンドを用意。 起動、コミット、登録など ○SolrCloud向けのAnuenueを検討中 branch-cloudにあります。 今後の予定 インスタンス追加削除を動的に実行できるようにしたい ○Hadoop Conferenceの宣伝w Oluolu:Hadoop上で動くクエリログマイニングツール Likelike:LSHをHadoopで実装(Hadoop Conference 2011 Fallで発表) 5. LT 5.1 「solrとRの連携について」 by @yutakashino さん(BakFoo) Python本、Zope本を書いてます。 ○NHKの実証実験で利用? ○TwitterストリームをSolrにストア facet.date ○Rでキーワード頻度グラフ Node.js、Redis、R、Solrを使ってる。しかもPython ○デモ キーワード+日付でグラフが出てくる。 Rでプロット。 GoogleのチャートAPIを利用すると面白いことができる。 5.2 「 Apache ManifoldCF」 by 阿部さん(ロンウィット) ○Apache Incubator ○Manifold Connector Framework Solr <- MCF <- web+non-web repositories すぐに利用可能。 ○概要 出力はSolr。 接続先はWeb、DB、CMS、などなどいろいろRepositoryConnectorというのがあります。 ○Crawler Agent クロールに関するJobの管理 接続先、スケジュールなど ○Windowsサーバのクロールもできる 社内のナレッジ共有などに使える。権限周りも簡単に対応可能。 JCIFS.jarによりWindowsの権限情報を取得 ○クロール設定画面もある デモ ○導入が簡単なのがおすすめ。 ○ManifoldCFの資料関連 http://www.manning.com/wright 懇親会についてはあとで記載します!! ということで追記です。 懇親会でも色々と面白い話を聞けました。 @PENGUINANA_さんにはCOOKPADのCI関連の話を聞けました。 1日に数度リリースするという話もあるようでした。