我想基于预先确定的列表为Lucene文档创建标记列表。
所以,如果我们有一个带文字的文件
寻找具有Lucene经验的Java程序员
我们有关键字列表(约1000项)
java,php,lucene,c#[...]
我想确定文档中存在关键字Java和Lucene。 只是做一个java或PHP或lucene将无法正常工作,因为那时我不知道哪个关键字产生了命中。
有关如何在Lucene中实现此功能的任何建议吗?
答案 0 :(得分:1)
我假设您有一个或多个索引字段,并且您希望根据关键字与文档的索引术语的交集来构建标记云。
您的问题与突出显示非常相似,因此适用相同的想法,您可以:
请注意,如果要使用术语向量,则需要在编译时启用它们(请参阅Field.TermVector.YES documentation和Field 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索引该字段。