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

Java 从列表中标识文档中是否存在关键字,java,lucene,Java,Lucene,我想基于预先确定的列表为Lucene文档创建标记列表 所以,如果我们有一个文本文档 寻找一个有Lucene经验的Java程序员 我们有关键词列表(大约1000项) java、php、lucene、c#[…] 我想确定文档中是否存在Java和Lucene关键字。 仅仅使用java、php或lucene是行不通的,因为这样我就不知道是哪个关键字产生了点击 关于如何在Lucene中实现这一点,有什么建议吗?我假设您有一个或多个索引字段,并且希望根据关键字和文档索引项的交集构建标记云 您的问题与突出显示

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

所以,如果我们有一个文本文档

寻找一个有Lucene经验的Java程序员

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

java、php、lucene、c#[…]

我想确定文档中是否存在Java和Lucene关键字。 仅仅使用java、php或lucene是行不通的,因为这样我就不知道是哪个关键字产生了点击


关于如何在Lucene中实现这一点,有什么建议吗?

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

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

  • 重新分析Lucene文档的存储字段
  • 用于快速访问文档的存储字段
请注意,如果要使用术语向量,则需要在编译时启用它们(请参见和)。

是的,这是可行的

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");

}

您必须记住使用TermVector为字段编制索引。在该字段的hibernate搜索注释中为“是”。

看起来TermVector可能就是这里的票证。我正在使用Hibernate搜索,所以我将看看是否可以在这种情况下使用此功能