我使用@Id注释在我的实体中定义了一个字段。但是这个@Id没有映射到弹性搜索文档中的_id。 _id值由弹性搜索自动生成。
我正在使用" org.springframework.data.annotation.Id;"。这是@Id支持spring-data-es吗?
我的实体:
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
@Document(
indexName = "my_event_db", type = "my_event_type"
)
public class EventTransactionEntity {
@Id
private long event_pk;
public EventTransactionEntity(long event_pk) {
this.event_pk = event_pk;
}
private String getEventPk() {
return event_pk;
}
}
我的存储库类:
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import com.softwareag.pg.pgmen.events.audit.myPackage.domain.EventTransactionEntity;
public interface EventTransactionRepository extends ElasticsearchRepository<EventTransactionEntity, Long> {
}
我的申请代码:
public class Application {
@Autowired
EventTransactionRepository eventTransactionRepository;
public void setEventTransactionRepository(EventTransactionRepository repo)
{
this.eventTransactionRepository = repo;
}
public void saveRecord(EventTransactionEntity entity) {
eventTransactionRepository.save(entity);
}
public void testSave() {
EventTransactionEntity entity = new EventTransactionEntity(12345);
saveRecord(entity);
}
}
执行ES查询(保存后):
http://localhost:9200/my_event_db/my_event_type/_search
预期结果:
{
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "my_event_db",
"_type": "my_event_type",
"_id": "12345",
"_score": 1,
"_source": {
"eventPk": 12345,
}
}]
}}
获得的结果:
{
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "my_event_db",
"_type": "my_event_type",
"_id": "AVL7WcnOXA6CTVbl_1Yl",
"_score": 1,
"_source": {
"eventPk": 12345,
}
}]
}}
你可以看到我在结果中得到的_id,&#34; _id&#34;:&#34; AVL7WcnOXA6CTVbl_1Yl&#34;。但我希望_id字段等于eventPk值。
请帮忙。感谢。
答案 0 :(得分:2)
问题在于你的getter应该是public
与@Id
字段的类型相同:
public long getEvent_pk() {
return event_pk;
}
答案 1 :(得分:0)
如果使用字段名称为id
的字符串类型ID,则可以映射它private String id;
这很有用。看起来只接受字符串类型id字段。