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円(税込、送料別)

コメント

タイトルとURLをコピーしました