[PC] FlexLuceneの検索編 〜インデックスの作成ができたらあとは検索だ〜
FlexLuceneを使って検索する
インデックス作成編に続いて、次は検索するプログラムを紹介します。前回、JapaneseAnalyzerの実装方法を開示したのでそれを使い回せば難なく作成可能だと思います。
Query及びSearcher
インデックスを作成するときは、IndexWriterを使用しましたが、検索は、QueryとSearcherを使用します。QueryにJapaneseAnalyzerをセットして、検索語を指定します。その後、SearcherにQueryを渡す形で検索が可能です。
サンプルコード
では、動作確認だけしたサンプルコードを付けます。コマンドラインでのプログラムで、検索キーも「検索語」で固定です。入力できるように改定するなど修正して、ご利用ください。
using System; using FlexLucene.Analysis.Ja; using FlexLucene.Store; using FlexLucene.Index; using FlexLucene.Document; using FlexLucene.Search; using FlexLucene.Queryparser.Classic; using java.nio.file; namespace TestSearch { class Program { const string INDEXDIR = @"c:\temp\ldn-index"; static void Main(string[] args) { java.nio.file.Path idx_path = FileSystems.getDefault().getPath(INDEXDIR); FSDirectory dir = FSDirectory.Open(idx_path); // テキストの解析方法(アナライザー)を定義 JapaneseAnalyzer analyzer = new JapaneseAnalyzer(); Query query = new QueryParser("content", analyzer).Parse("検索語"); int hitsPerPage = 10; IndexReader reader = DirectoryReader.Open(dir); IndexSearcher searcher = new IndexSearcher(reader); TopDocs docs = searcher.Search(query, hitsPerPage); ScoreDoc[] hits = docs.ScoreDocs; System.Console.WriteLine("Found " + hits.Length + " hits."); for (int i = 0; i < hits.Length; ++i) { int docId = hits[i].Doc; Document d = searcher.Doc(docId); System.Console.WriteLine((i + 1) + ". " + d.Get("title") + "\t" + d.Get("place")); } reader.close(); } } }
まとめ
前回と今回とでFlexLuceneを使っての検索インデックスの作成及び検索のプログラムを紹介しました。もう少しいろいろなものができたらまた紹介していきたいと思います。FlexLucene及びLuceneを使っていただければ幸いです。