マルチスレッドでインデックスの作成と検索
Lucene入門に書いてあったけど、マルチスレッドで作成すると10倍ほど早いことがあるらしい、土曜日で作成と検索を完成させたい
インデックスの作成では今回の環境においてあまり意味がないので辞めた
インデックスの検索では意味があるけど難しくてわからないw
Luceneスコアの表示
Hitsクラスを使わないでTopDocsクラスとScoreDocクラスを使った場合
System.out.println("Searching for: " + query.toString("contents")); TopDocs docs = searcher.search(query, 10); for (ScoreDoc scoreDoc : docs.scoreDocs) { int docId = scoreDoc.doc; Document doc = searcher.doc(docId); System.out.println("user : " + doc.get("user")); System.out.println("Score : "+scoreDoc.score); }
何もいじってないはずのMoreLikeThisが動かなくなった
なぜだあああああああああああ
クエリーを生成するドキュメントが少ないからだった
Luceneのインデックスをバックアップ
インデックスの作成方法
その1
- 日本語のPublicTimeLineをいろいろな情報と共にDBに追加
- その中のTweetをSenで形態素解析して、またDBに追加
- そのDBからDataImportHandlerを使いインデックスに追加
その2
その3
DataImportHandlerを使わないでその3でいい気がしてきた
けどDBに形態素解析した結果を保持するとTweetと冗長か
けどもしインデックスが消えたら、すべてのTweetを形態素解析し直さなきゃいけなくて恐ろしく時間がかかる。インデックスを毎日バックアップしておけばその心配もないか。ということでその2に決定
Lucene本を読みながらインデックスの作成を作り直す。
- クローラ、index作成クラスの仕事
まだDBのファイルDL終わらないから,先に2,3を実装しよう
予定変更
DB必要なし!
その4
[ { "url": "http://twitter.com/wata308/status/000000000", "image": "http://s3.amazonaws.com/twitter_production/profile_images/000000000/a.jpg", "time2": "2009-06-25T16:14:51+09:00", "content": "TWEEEEEEEEEET", "user": "snkken", "time": "2009-06-25 16:14:51", "id": 000000000 },
- 日本語のPublicTimeLineをいろいろな情報取得(取得できる情報は上記の通り
- contentをJapaneseAnalyzerで形態素解析
- 形態素解析した文字列とuserからオリジナルのアナライザを使ってインデックスを作成
やっぱりDB必要だ。検索結果としてアイコンを表示しようと思うと、DBにそれらの除法を残しておいた方がいい。ユーザー名からshowStatus()で情報取得してると、すぐにAPI制限だ
本当は自分で日本語PublicTimelineのクローラを作れば色々できるんだけど、そのスキルがないために色々制限されちゃう
firehose使えれば簡単なのになー
だいたいできたと思うけど、analyzer-sen.xmlで指定している以外のものも形態素解析の結果として帰って来ちゃう
日本語のクロールとインデックスを1分ごとに自動的にやるもの完成
あとは他の情報をDBに追加する作業
MySQLのバックアップ
mysqldump --user=root -x -F --all-databases > db.dmp
利用者がアクセスする事できる状態のままバックアップって難しいみたい
最初はサーバ2台用意するつもりはないからレプリケーションできないし、どうしたものか
よく考えたら利用者はMySQLに兆ksetuアクセスするわけじゃないのだから、自分が好きなときにMySQLロックしても何の問題もなかったんだ
解決
あとはDBにアクセスするプログラムが止まっているときにdumpすればOK
そのタイミングが問題か
基本的にプログラムはずっと一定間隔で動かす予定だからなー
バックアップ時間になったら2分ぐらい止めるっていうの単純でいいかな
Apache Lucne入門を買った
Apache Lucne入門を買った
買って良かった
Index周りだいぶ適当にやってたからそこらへんを綺麗に書けば速度上げられそう
ただところどころ古いのが残念
Hitsクラスとか使ってたりしちゃう