获取word位置在lucene的文档中

时间:2013-04-02 18:41:40

标签: java lucene

我想知道如何使用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));

我试着通过调用 terms.hasPositions()来判断该术语是否有位置返回true 但不知道哪个功能可以给我这个位置?

1 个答案:

答案 0 :(得分:1)

在您尝试检索位置信息之前,您必须确保索引发生在首先启用位置信息的位置。

TermsEnum.DocsAndPositionsEnum :获取当前字词的DocsAndPositionsEnum。枚举未定位时不要调用此方法。如果未对位置编制索引,则此方法将返回null。