Luceneで文章の類似文章検索

Luceneは普通に使うと単語からの検索なので文章との比較はできない。
が、実は文章のためのメソッドが用意されていた
MoreLikeThis

サンプルの修正が終わったので上記の修正開始
少し苦戦中
けどこれが完成すれば基本的な機能は完成でwebに実装するだけだ!
駄目だ・・・
多分Queryの生成がうまくいってない

import org.apache.jackrabbit.core.query.lucene.MoreLikeThis;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.ja.JapaneseAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;

class SearchJFilesFromDoc {
	public static void main(String[] args) throws CorruptIndexException, IOException, ParseException {
		System.setProperty("sen.home", "D:\\Software\\java\\sen");
		String index = "C:\\Lucene\\index";
		IndexReader reader = IndexReader.open(index);
		IndexSearcher searcher = new IndexSearcher(index);
		MoreLikeThis mlt = new MoreLikeThis(reader);
		Analyzer analyzer = new JapaneseAnalyzer();
		mlt.setAnalyzer(analyzer);
		mlt.setFieldNames(new String[] { "contetns", "path" });
		String user = "snkken";
		String userTweet = "C:\\Lucene\\files\\" + user + ".txt";
		Reader target = new StringReader(userTweet);
		Query query = mlt.like(target);

		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("path" + doc.get("path"));
		}
		searcher.close();
	}
}


別のお話
単語を抽出する際の品詞を指定できるみたい。
類似ユーザー検索だと、名詞に限定したほうがいいよね。
wikipediaはてなの固有名詞だけに限定するのもありかも

これはシステムが動いてからおいおい試していこう