如何将lucene documentid映射到Hibernate搜索实体字段

时间:2014-09-11 06:28:38

标签: java lucene hibernate-search

我有一个带有documentid的实体

@Indexed
@Analyzer(impl = EnglishAnalyzer.class)
@Entity
@Table(name = "Tag", schema = "cpsc")
public class Tag extends BaseObject {

public static final String NAME_FIELD = "name";

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "uuidGenerator")
@GenericGenerator(name = "uuidGenerator", strategy = "mypackage.UuidGenerator")
@Column(name = ID_FIELD)
@DocumentId
private Long id;

...

我的生成器将创建一个唯一的Long id,并在保存后将其存储到数据库中。

但是我怎么能在lucene或set中获得文件记录与我的实体ID相同? 获得带有lucene文档id的字段非常有用。

我需要它的主要原因是从实体的索引获取术语,我需要lucene id。 也许有另一种方法来获得术语hibernate-search方式?

感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

这里有几件事。首先,您不必指定@Id以及@DocumentId。如果未指定@DocumentId,JPA ID将自动作为文档ID。如果你想明确地使用另一个字段作为Lucene文档id,那么使用@DocumentId真的是有意义的。

回答你的问题 - “但我如何在lucene或set中获得文档与我的实体ID相同” - 它们已经是相同的了。并且已经有一个文档ID字段,例如您可以通过投影检索。要使用的投影常数为FullTextQuery.DOCUMENT_ID。另见http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#projections