Lucene 1章 Luceneの概要
- 1.1. Luceneについて
- 1.2. インデックスの作成
- 1.3. インデックスからの検索
1.3. インデックスからの検索
Luceneでは、検索は以下の手順で行います。- IndexSearcherの作成
- 検索語の取得
- 検索語の解析
- 検索結果の取得
import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.IOException; import org.apache.lucene.queryparser.QueryParser; import org.apache.lucene.queryparser.ParseException; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Hits; import org.apache.lucene.search.Query; import org.apache.lucene.analysis.ja.JapaneseAnalyzer; import org.apache.lucene.document.Document; public class SampleSearch{ public static void main(String[] argv) throws IOException, ParseException{ String index = argv[0]; IndexSearcher searcher = new IndexSearcher(index); JapaneseAnalyzer analyzer = new JapaneseAnalyzer(); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.println("検索語を入力してください:"); String line = in.readLine(); if(line.length() == -1)break; Query query = QueryParser.parse(line, "contents", analyzer); Hits hits = searcher.search(query); System.out.println(hits.length() + " 件見つかりました。"); if(hits.length() != 0){ for (int i = 0; i < hits.length(); i++) { Document doc = hits.doc(i); String url = doc.get("url"); System.out.println("No."+ i + ":" + url); } } } searcher.close(); } }検索語はSystem.inから取得しています。 QueryParserを使い、検索語を形態素解析します。QueryParserもJapaneseAnalyzerを利用しています。
解析の結果を保存するのが「org.apache.lucene.search.Query」クラスです。 Queryを引数に「org.apache.lucene.index.IndexSearcher」のsearch(Query)を呼ぶことで、 インデックスから検索を行うことが出来ます。
検索の結果は「org.apache.lucene.document.Hits」というDocumentのコレクションとして与えられます。 length()メソッドとhits(int)メソッドでDocumentを取得します。