当前位置: 首页 > 知识库问答 >
问题:

利用lucene获取文档中的单词位置

冯淳
2023-03-14

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

共有1个答案

殳睿
2023-03-14

在尝试检索位置信息之前,必须首先确保在启用位置信息的情况下进行索引。

DocsAndPositionsEnum:获取当前术语的DocsAndPositionsEnum。当枚举未定位时,不要调用此命令。如果未对位置进行索引,此方法将返回null。

 类似资料:
  • 问题内容: 我需要遍历Lucene索引中的所有文档,并获取每个术语在每个文档中出现的位置。据我能从Lucene javadoc所了解的,做到这一点的方法是做这样的事情: 但是,即使(1)索引的确包含相关字段上的位置,并且(2)术语向量声称具有位置(即:tv.hasPositions()== true),我仍会为所有变量获取“ -1”职位。 首先,我做错什么了吗?是否有其他方法可以按文档迭代发布?第

  • 为了在Lucene查询返回的文档中显示突出显示的匹配词,Lucene搜索结果可能包含用于将文档作为匹配我的请求返回的词。 例如: > Lucene查询:"狗猫" 结果:[“狗很好”,“狗和猫是朋友”] 如何通过Lucene实现这一点?我无法手动处理猫或狗,也无法处理请求词和返回词之间的任何差异。

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

  • 问题内容: 我试图找出word文档中是否存在字体为2的任何内容。但是,我无法做到这一点。首先,我尝试读取只有一行和7个单词的示例单词文档中每个单词的字体。我没有得到正确的结果。 这是我的代码: 但是,以上代码始终使字体大小加倍。也就是说,如果文档中的实际字体大小是12,则输出24;如果实际字体是8,则输出16。 这是从Word文档读取字体大小的正确方法吗? 问题答案: 是的,那是正确的方法;测量单

  • 给定文档中的术语匹配,访问匹配词的最佳方式是什么?我读过这篇文章http://searchhub.org//2009/05/26/accessing-words-around-a-position-match-in-lucene/,但问题是Lucene API自这篇文章(2009)以来完全改变了,有人能告诉我在Lucene的新版本中如何做到这一点吗,比如Lucene4.6.1? 编辑:

  • 问题内容: 我正在Java应用程序中处理一些英文文本,因此需要阻止它们。例如,从文本“ amenities / amenity”中,我需要获取“ amenit”。 该函数如下所示: 我已经找到了Lucene Analyzer,但是对于我所需要的来说,它看起来太复杂了。 http://lucene.apache.org/java/2_2_0/api/org/apache/lucene/analysi