从列表中识别文档中是否存在关键字

时间:2012-02-13 16:06:28

标签: java lucene

我想基于预先确定的列表为Lucene文档创建标记列表。

所以,如果我们有一个带文字的文件

寻找具有Lucene经验的Java程序员

我们有关键字列表(约1000项)

java,php,lucene,c#[...]

我想确定文档中存在关键字Java和Lucene。 只是做一个java或PHP或lucene将无法正常工作,因为那时我不知道哪个关键字产生了命中。

有关如何在Lucene中实现此功能的任何建议吗?

2 个答案:

答案 0 :(得分:1)

我假设您有一个或多个索引字段,并且您希望根据关键字与文档的索引术语的交集来构建标记云。

您的问题与突出显示非常相似,因此适用相同的想法,您可以:

  • 重新分析Lucene文档的存储字段
  • 使用term vectors快速访问文档的存储字段。

请注意,如果要使用术语向量,则需要在编译时启用它们(请参阅Field.TermVector.YES documentationField constructor)。

答案 1 :(得分:1)

是的,这有效

FullTextSession fts = Search.getFullTextSession(getSessionFactory().getCurrentSession());

Query q = fts.getSearchFactory().buildQueryBuilder()
    .forEntity(Offer.class).get()
    .keyword()
    .onField("id")
    .matching(myId)
    .createQuery();
Object[] dId = (Object[]) fts.createFullTextQuery(q, Offer.class)
    .setProjection(ProjectionConstants.DOCUMENT_ID)
    .uniqueResult();

if(dId != null){

    IndexReader indexReader = fts.getSearchFactory().getIndexReaderAccessor().open(Offer.class);

    TermFreqVector freq = indexReader.getTermFreqVector((Integer) dId[0], "description");

}

你必须记住在你的hibernate搜索注释中用TermVector.YES索引该字段。