あいまい検索!

Lucene使ってあいまい検索!
こういう機能がデフォルトで実装されてると凄い便利ですね(当然か)。


// q : 検索ワード
private static void printPossibilities(String q) throws IOException {
// directory : インデックスの格納ディレクトリ(RAMDirectoryとかFSDirectoryとか)
IndexReader reader = IndexReader.open(directory);
// FIELD_COUNT : フィールド名, 0.4Fは精度
FuzzyQuery fq = new FuzzyQuery(new Term(FIELD_CONTENT, q), 0.4F);
// BooleanQueryに書き直す
BooleanQuery bq = (BooleanQuery)fq.rewrite(reader);
// bqというTermQueryがあるか調べる?
BooleanClause[] clauses = bq.getClauses();
if (clauses.length > 0) {
System.out.println("\t\tもしかして・・・");
for (BooleanClause clause: clauses) {
Term term = ((TermQuery)clause.getQuery()).getTerm();
System.out.println("\t\t" + term.text());
}
}
reader.close();
}

ソース元は関口さんのブログからです。

Luceneのしくみはなんとなく分かったんだけど、クローラーのNutchとどう嚙み合ってるのかがまだよくわかんない。
次はそこを調べよう。