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方法
术语位置向量供您使用
不管怎样,希望能有帮助