当前位置: 首页 > 面试题库 >

如何从Lucene中的文档项向量获取位置?

酆君墨
2023-03-14
问题内容

我需要遍历Lucene索引中的所有文档,并获取每个术语在每个文档中出现的位置。据我能从Lucene javadoc所了解的,做到这一点的方法是做这样的事情:

IndexReader ir = obtainIndexReader();
Terms tv = ir.getTermVector( doc, field );
TermsEnum terms = tv.iterator();
PostingsEnum p = null;
while( terms.next() != null ) {
    p = terms.postings( p, PostingsEnum.ALL );
    while( p.nextDoc() != PostingsEnum.NO_MORE_DOCS ) {
        int freq = p.freq();
        for( int i = 0; i < freq; i++ ) {
            int pos = p.nextPosition();   // Always returns -1!!!
            BytesRef data = p.getPayload();
            doStuff( freq, pos, data ); // Fails miserably, of course.
        }
    }
}

但是,即使(1)索引的确包含相关字段上的位置,并且(2)术语向量声称具有位置(即:tv.hasPositions()== true),我仍会为所有变量获取“
-1”职位。

首先,我做错什么了吗?是否有其他方法可以按文档迭代发布?第二:到底发生了什么?索引包含位置,getTermVector返回的Terms实例声称包含位置,并且我正在Luke中查看正确的位置值,但是当我尝试在代码中访问所述值时,我仍然得到-1。是什么赋予了?

编辑:相关字段配置了以下选项:

    FieldType ft = new FieldType();
    ft.setIndexOptions( IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS );
    ft.setStoreTermVectors( true );
    ft.setStoreTermVectorOffsets( true );
    ft.setStoreTermVectorPayloads( true );
    ft.setStoreTermVectorPositions( true );
    ft.setTokenized( true );
    return ft;

问题答案:

您是否在索引时间在字段类型上设置了FieldType.setStoreTermVectorPositions(true)?http://lucene.apache.org/core/5_5_0/core/org/apache/lucene/document/FieldType.html#setStoreTermVectorPositions(boolean)



 类似资料:
  • 问题内容: 我正在使用Lucene 3.5.0,我想输出每个文档的术语向量。例如,我想知道所有文档和每个特定文档中术语的出现频率。我的索引代码是: 有人可以帮助我编写程序来做到这一点吗?谢谢。 问题答案: 首先,您不需要存储术语向量就可以只知道文档中术语的频率。Lucene仍然存储这些数字以用于TF- IDF计算。您可以通过调用并遍历结果来访问此信息。 如果您有其他目的,并且实际上需要访问术语向量

  • 我想知道如何使用Lucene获取单词在文档中的位置我已经生成了索引文件,我想从索引中提取一些信息,如索引的单词,单词在文档中的位置等

  • null 完整代码:

  • 问题内容: 我正在尝试使用Apache Lucene进行令牌化,但我对从中获取令牌的过程感到困惑。 最糟糕的是,我正在查看JavaDocs中解决我的问题的注释。 http://lucene.apache.org/java/3_0_1/api/core/org/apache/lucene/analysis/TokenStream.html#incrementToken%28%29 不知何故,应该使用

  • Lucene 是一个基于 Java 的开源搜索库。 它非常受欢迎,也是一个快速搜索库。它在基于 Java 的应用程序中用于以非常简单和有效的方式向任何类型的应用程序添加文档搜索功能。

  • 问题内容: 我有这个HTML代码: 问题是我收到消息“错误”。这意味着iframe的文档未正确获取,而GetDoc函数实际返回的是父文档。 如果您告诉我在哪里犯错,我将不胜感激。(我想将文档托管在IFrame中。) 谢谢。 问题答案: 您应该可以使用以下代码访问IFRAME中的文档: 但是,如果框架中的页面是从其他域(例如google.com)加载的,则将无法执行此操作。这是因为浏览器的“相同来源