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のインターフェース以外は完成?
- SEの覚え書き | Solr v1.3 の DIH(DataImportHandler)