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を取得します。

