我想用Lucene阅读我的索引中的单个术语

时间:2011-01-14 13:26:34

标签: java lucene indexing

我想阅读每一个索引。我想阅读并打印以控制索引中的单个术语。 (我不想用Luke查看内容)。我必须使用课程IndexReader吗?

有人可以帮助我吗?

我试着这样做:

    iReader = IndexReader.open(directory);

    int num = iReader.numDocs();
    for ( int i = 0; i < num; i++)
    {
        if ( ! iReader.isDeleted( i))
        {
            org.apache.lucene.document.Document d = iReader.document(i);
            System.out.println( "d=" +d.getField("title").tokenStreamValue());

        }
    }


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

    //aggiungo tutti i documenti


    Field title = new Field(
              "title",
              testDoc.title,
              Field.Store.YES,
              Field.Index.ANALYZED,
              Field.TermVector.WITH_POSITIONS_OFFSETS);

    doc.add(title);


    Field content = new Field(
              "content",
              testDoc.content,
              Field.Store.YES,
              Field.Index.ANALYZED,
              Field.TermVector.WITH_POSITIONS_OFFSETS);
    doc.add(content);


    iWriter.addDocument(doc);

d = null; 我哪里做错了? 我想将该术语检索到我编入索引的字段标题...

非常感谢。

3 个答案:

答案 0 :(得分:1)

同样,我使用Java,但原理是相同的。

您想要做的是类似于枚举术语频率,但您只关心不同的字段。

example以及此example如何计算Lucene索引中的术语频率应该可以帮助您。

答案 1 :(得分:0)

要检查索引,请使用IndexReader。该类有一个方法document(int),您可以使用该方法查找索引包含的单个文档。然后,该文档将为您提供为该文档创建的所有字段。

使用该字段,您可以获取它的值或令牌流(即最终在索引中的字符串)。

[编辑]如果删除文档,索引将有漏洞。所以你必须添加一个支票:

org.apache.lucene.document.Document d = iReader.document(i);
if( d == null ) continue; // <<-- You need this check

System.out.println( "d=" +d.getField("title").tokenStreamValue());

答案 2 :(得分:0)

我正在使用Lucene.Net,但我认为逻辑是相同的。

必须设置StringValue(),ReaderValue()和BinaryValue()中的一个。那些未使用的将返回null或抛出异常。在您的情况下,请尝试读取StringValue()。