目次へ

1.3. インデックスからの検索

Luceneでは、検索は以下の手順で行います。
  1. IndexSearcherの作成
  2. 検索語の取得
  3. 検索語の解析
  4. 検索結果の取得
検索語もAnalyzerを用い、不必要な言葉などを除外して検索することが出来ます。
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を取得します。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp