我有一个带有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方式?
感谢您的任何建议。
答案 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。