金曜日, 8月 29, 2008

[Scala] Luceneのハイライタ(NGramTokenizer)

NGramTokenizerをScalaでやってみました。

import org.apache.lucene.analysis.Analyzer;

import org.apache.lucene.analysis.ngram.NGramTokenizer;

import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.Scorer;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.TextFragment;

import java.io.Reader;

object HighlightRunner {
val CONTENT = "東京特許許可局";
val QUERY_STRING = "許可";
val F = "f";
var analyzer: Analyzer = new NGramAnalyzer(1,3);

def main(args: Array[String]) {
try{
var qp :QueryParser = new QueryParser( F, analyzer );
var query :Query = qp.parse( QUERY_STRING );
var scorer :Scorer = new QueryScorer( query, F );
var h :Highlighter = new Highlighter( scorer );
println( h.getBestFragment( analyzer, F, CONTENT ) );
} catch {
case e:StringIndexOutOfBoundsException => ()
case e:Exception => {
e.printStackTrace
}
} finally {
// println("FINALLY");
}
}
}

// http://blog.goo.ne.jp/13th-floor/e/f694fdb1319134b40e4dee5ed8c15a92
class NGramAnalyzer(minGram:Int, maxGram:Int) extends Analyzer {
def tokenStream(fieldName:java.lang.String, reader:java.io.Reader): org.apache.lucene.analysis.TokenStream =
new NGramTokenizer(reader, minGram, maxGram);
}

木曜日, 8月 28, 2008

[Scala] Luceneのハイライタ(N-gram×)

全文検索エンジンLuceneの実験。
公開されていた例(≒N-gramでHighlighterがうまく動かない)をScalaでリライトしてみた。
- - - -
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.Scorer;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.TextFragment;

object HighlightRunner {
val CONTENT = "ひふみひふみひふみひふみひひふひふみろひふみろ";
val QUERY_STRING = "ひふみひふみ";
val F = "f";
var analyzer : Analyzer = new CJKAnalyzer();
def main(args: Array[String]) {
try{
var qp :QueryParser = new QueryParser( F, analyzer );
var query :Query = qp.parse( QUERY_STRING );
var scorer :Scorer = new QueryScorer( query, F );
var h :Highlighter = new Highlighter( scorer );
println( h.getBestFragment( analyzer, F,  CONTENT ) );
} catch {
case e:StringIndexOutOfBoundsException => ()
case e:Exception => {
e.printStackTrace
}
} finally {
}
}
}

木曜日, 8月 21, 2008

[linux] memcachedをsnmpで

AgentXというプロトコルを使うと、既存のsnmpdにアドオンで監視/モニタ対象を増やすことが出来ます。
この方向で、memcachedもAgentXをしゃべられるようにしよう、というpatchがありました。

運用観点でも進歩してくると、ありがたいです。

火曜日, 8月 12, 2008

[linux] DTrace

OpenSolarisで話題のDTrace(PostgreSQLでもサポート)は、いまやLinuxでも使えるんですね(DTrace for Linux)。memcachedもv1.2.6からサポートと書いてあることですし、ぜひ使ってみたいものです。

土曜日, 8月 09, 2008

[Linux] jmxproxy

Javaアプリの性能は、JMXに乗っているならZAPCATZABBIXからモニタリングが可能となりました。ですが、これを自前監視ツール(例/Cacti)などから見るときはどうしたらよいのか、と思っていたら、意外にTomcatそのものに、jmxproxyなんてものが入っていたのですね。
http://snbhsmt.blog110.fc2.com/blog-entry-74.html

snbhsmt_logさんの例 via kwout


これなら、スクリプトでパースするのも簡単そうです。