Lucene 读取特定文档的术语向量

Lucene 读取特定文档的术语向量,lucene,Lucene,有没有办法读取文档的术语向量以及每个术语的位置 在创建索引期间,我正在启用位置、频率等 FieldType fieldType = new FieldType(); fieldType.setStoreTermVectors(true); fieldType.setStoreTermVectorPositions(true); fieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS

有没有办法读取文档的术语向量以及每个术语的位置

在创建索引期间,我正在启用位置、频率等

        FieldType fieldType = new FieldType();
        fieldType.setStoreTermVectors(true);
        fieldType.setStoreTermVectorPositions(true);
        fieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS);
        fieldType.setStored(true);
在读取搜索索引时,我使用

术语termVector=indexReader.getTermVector(docId,“内容”); TermsEnum TermsEnum=termVector.iterator()

termsEnum似乎未定位,我不确定如何获取文档中每个术语的位置值

感谢任何人在这方面的帮助。

我想,稍微沮丧一下可能会解决你的问题。我的lucene版本是3.6.2。下面的代码是用Scala编写的

假设您在一个文档的内容字段中有“我们是我们不爱的家人”,并且我们成功地匹配了该文档,那么我们开始获得每个术语的位置

val topDocs = iSearch.search("some query", 1).scoreDocs.toList

topDocs.foreach { matched =>

     val termVectors = indexReader.getTermFreqVector(matched.doc, "contents")
     // The field is added in document with TermVector.WITH_POSITIONS_OFFSETS,
     // better write some try..catch to make this more robust
     val tpvector = termVectors.asInstanceOf[TermPositionVector]

     val termAndPosition = termVectors.getTerms.toList.map { term =>
        val indexOfTerm = termVectors.indexOf(term)

        //Returns an array of positions in which the term is found
        term -> tpvector.getTermPositions(indexOfTerm).toList
     }

     // Map(family -> List(2), love -> List(5), we -> List(0, 3))
     println(termAndPosition.toMap)

}
基本上,are这个词在索引过程中会被省略,因为它是一个停止词。返回的映射实际上是有意义的,术语we出现在位置0和3。如果要获取偏移量,请使用getOffsets方法 术语位置向量供您使用

不管怎样,希望能有帮助