0

Lucene を使用して文書内の単語の位置を取得する方法を知りたい 既にインデックス ファイルを生成しており、索引付けされた単語、文書内の単語の位置などの情報をインデックスから抽出したい

私はこのようなリーダーを作成しました:

public void readIndex(Directory indexDir) throws IOException {
    IndexReader ir = IndexReader.open(indexDir);
    Fields fields =  MultiFields.getFields(ir);
    System.out.println("TOTAL DOCUMENTS : " + ir.numDocs());

    for(String field : fields) {
        Terms terms = fields.terms(field);
        TermsEnum termsEnum = terms.iterator(null);
        BytesRef text;
        while((text = termsEnum.next()) != null) {
            System.out.println("text = " + text.utf8ToString() + "\nfrequency = " + termsEnum.totalTermFreq());
        }
    }
}

ライターを次のように変更しました。

org.apache.lucene.document.Document doc = new org.apache.lucene.document.Document();

                FieldType fieldType = new FieldType();
                fieldType.setStoreTermVectors(true);
                fieldType.setStoreTermVectorPositions(true);
                fieldType.setIndexed(true);

                doc.add(new Field("word", new BufferedReader(new InputStreamReader(fis, "UTF-8")), fieldType));

そして、 trueを返すterms.hasPositions()を呼び出して、用語に位置があるかどうかを読み取ろうとしましたが、 どの関数が位置を与えることができるかわかりませんか??

4

1 に答える 1

1

位置情報を取得しようとする前に、最初に位置情報を有効にしてインデックス作成が行われたことを確認する必要があります。

TermsEnum.DocsAndPositionsEnum : 現在の用語の DocsAndPositionsEnum を取得します。列挙型が配置されていない場合は、これを呼び出さないでください。位置がインデックス化されていない場合、このメソッドは null を返します。

于 2013-04-02T19:55:47.027 に答える