阅读特定文档的TermVector

时间:2015-09-07 06:53:51

标签: lucene

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

在创建索引期间,我正在启用位置,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似乎没有定位,我不知道如何获取文档每个术语的位置值。

感谢任何人的帮助。

1 个答案:

答案 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中供您使用。

无论如何,希望它有所帮助。