有没有办法阅读文档的术语向量以及每个术语的位置?
在创建索引期间,我正在启用位置,freq等
FieldType fieldType = new FieldType();
fieldType.setStoreTermVectors(true);
fieldType.setStoreTermVectorPositions(true);
fieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS);
fieldType.setStored(true);
在阅读搜索索引时,我正在使用
获取Termvector术语termVector = indexReader.getTermVector(docId,“content”); TermsEnum termsEnum = termVector.iterator();
termsEnum似乎没有定位,我不知道如何获取文档每个术语的位置值。
感谢任何人的帮助。
答案 0 :(得分:0)
我认为TermPositionVector和一点点贬低可能会解决您的问题。我的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)
}
基本上,索引期间将省略术语 ,因为它是一个停用词。返回的地图实际上有意义,术语我们出现在位置0和3中。如果要获取OffSet,则 getOffsets 方法 在TermPositionVector中供您使用。
无论如何,希望它有所帮助。