SolrにRequestHandlerを追加する

以前Solrをイジった備忘録その1(データ投入編)でEmbeddedSolrServerなんちゅうのを使ってますよ なんてエントリを書きましたが、その時もRequestHandlerを追加したわけなんですが、 ローカルのUbuntuマシンにSolrの環境作ってて、どうやって追加したのか忘れちゃってたので備忘録的な。   RequestHandlerを追加するのはとても簡単で、 例えば↓こんなURL外から叩いたら、System.gc()して欲しいな、なんて局面があったとする。 #そんな局面ねぇよ、なんてのはさておきw ====== http://localhost:8080/solr/hoge?gc=do ======   そんな場合は、solrconfig.xmlに↓こんな入れてやります。 #検証用なのでデフォルトパッケージです。。WEB-INF/classesに突っ込んでやります。 ====== <requestHandler name="/hoge" class="HogeHandler" /> ======   作るクラスは org.apache.solr.handler.RequestHandlerBase ってクラスがいるので、 そいつを extends してやります。 ====== public class HogeHandler extends RequestHandlerBase { ======   Eclipseがオーバーライドをするヤツをビヨって作ってくれるので、 後は中身を埋めていくだけなのですが、メインな処理を書くところが↓ ====== public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) ======   上記の例だとgcってリクエストパラメータがdoだったらSystem.gc()ってことなので、 ↓こんなロジック入れてやります。 ====== if (req.getParams().get("gc").equals("do")) {   System.out.println("hogehoge");   System.gc(); } ======   一個ハマったところが↓こいつ。 SolrQueryResponseのsetHttpCaching ソース読んだら protected boolean httpCaching=true; で宣言されてました。ってことで、 ====== rsp.setHttpCaching(false); ======   で、 http://localhost:8080/solr/hoge?gc=do を叩くと、(Tomcatなので)catalina.outに、 ↓こんなん出てきてメデタシメデタシっていう。 ====== hogehoge 23.964: [GC 24347K->3996K(125632K), 0.0118300 secs] 23.976: [Full GC 3996K->3934K(125632K), 0.0982040 secs] 2010/08/20 15:18:19 org.apache.solr.core.SolrCore execute 情報: [] webapp=/solr path=/hoge params={gc=do} status=0 QTime=144 ======   さて、ぼちぼち環境出来てきたので、検証始めるか・・・。    

Apache Solr入門

Apache Solr入門

価格:3,780円(税込、送料別)