NgramTokenizerの問題点

IndexReader reader = IndexReader.open(dir,true);
IndexSearcher searcher = new IndexSearcher(reader);
Analyzer analyzer = new NGramAnalyzer();
QueryParser parser = new QueryParser("contents", analyzer);
String target ="石川遼";
target = target.replaceAll(" "," ");
Query query = parser.parse(target);
System.out.println("Searching for: " + query.toString("contents"));
Searching for: "石 川 遼 石川 川遼 石川遼"

こんな感じになります。
何が問題かというとこれだと「石川遼」はヒットしません。
ヒットするのは、「石川遼石川遼石川遼」がこの順番で含まれているテキスト
さてどうしよう・・・

改良している人を発見

無事でけた
ありがたや

Searching for: "石川遼"


solrへ追加
NGramAnalyzerとNGramAnalyzerForQueryをNgram.jarにまとめてC:\Lucene\tomcat\webapps\solr\WEB-INF\libに配置
C:\Lucene\tomcat\webapps\solr\conf\schema.xmlのJapaneseAnalyzerを記述していた部分を下記のように修正

 <fieldType name="text" class="solr.TextField">
      <analyzer class="analysis.NGramAnalyzerForQuery" />
    </fieldType>

これで1文字から検索が可能になり、京都を検索して東京都がヒットすることもなくなった。

あとはDBからindexを作成するDataImportHandlerを調べればWebのインターフェース以外は完成?