目次へ

3. 検索

2005.09.12 株式会社四次元データ 宮澤了祐

3.1. 検索対象となる情報

インデックスを作成する際、インデックスをつける設定が行われていた情報が、検索対象となり得るものです。 コンストラクタを用いるならば第二引数indexがTrueになっているField、 クラスメソッドを用いるならばText()やKeword()メソッドで取得したFieldは、検索対象となり得ます。

doc.add(Field.UnIndexed("url", filepath[i]));
doc.add(new Field("title", title, true, true, false));
doc.add(Field.Text("contents",reader));

上の例では「contents」「title」の名前がついた情報が検索対象となり得ます。 インデックスをつけられた情報は、Termクラスによって保存されています。

org.apache.lucene.index.Term

Termはインデックスをつけた情報の最小単位です。 所属するFieldの名前とその値を持ちます。 形態素解析するように(token = true)Fieldを設定した場合、値を形態素解析されてできた一語一語がTermの値となります。 つまり1つのFieldから複数のTermが作成されることになります。 そうでない場合は、Fieldの値がそのままTermの値となります。

さてインデックスを作成する際にindexをtrueに設定した情報は、Termクラスを通して取得することが出来ます。

IndexReader reader = IndexReader.open(index);
TermEnum terms = reader.terms();

while(terms.next()){
    System.out.println(terms.term());
}

TermはIndexReadeの.terms()メソッドにより、Termの集合体「org.apache.lucene.index.TermEnum」として与えられます。 どのTermがどのドキュメントに入っているかの情報は「org.apache.lucene.index.TermDocs」を使用します。

TermDocs termDocs = reader.termDocs(terms.term());

while(termDocs.next()){
    System.out.println(termDocs.doc());
    System.out.println(termDocs.freq());
} 

docメソッドは、そのTermが入っているDocumentのidを返します。 freq()メソッドは、そのTermがそのDocumentの中で何回発生しているかを返します。 next()メソッドで、そのTermが入っている次のDocumentに移ります。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp