目次
「第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日に数度リリースするという話もあるようでした。
あとは、Rについても@yutakashinoさんから概要が聞けたのが良かったです。
ちょっとだけ追記。まだ成形する予定ですが、とりあえず。
追記:スライドが公開され始めたので。
関口さんのスライドはこちら 阿部さんのスライドはこちら @PENGUINANA_さんのスライドはこちら。 @takahi_iさんのスライドはこちらからPDFダウンロード可能。
その他に関連するブログも見つけましたので。 「Solr@Cookpad」- Solr勉強会で発表してきました Ars longa, vita brevis: 第6回 Solr 勉強会に行ってきた
勉強会で出てきた各製品などのリンク: 色々とURLが出てきていたので、リンクをまとめておきます。
- lucene-compression
- Anuenue Apache Solr のラッパー
- Likelike LSH (Localtiy Sensitive Hashing)の実装
- OluOlu 検索ログマイニングツール
- @takahi_iさんのLuceneRevolution2011のスライド
- Kuromoji 形態素解析器
- lucene-gosen 形態素解析器(Senの後継)
- Apache ManifoldCF
comments powered by Disqus
See Also by Hugo
- Hadoopソースコードリーディング第7回に参加しました。(Jugemより移植)
- 第15回Elasticsearch勉強会を開催しました。 #elasticsearchjp
- 第11回Elasticsearch勉強会を開催しました。#elasticsearchjp
- 第10回Elasticsearch勉強会を開催しました。#elasticsearchjp
- 第9回Elasticsearch勉強会を開催しました。#elasticsearchjp