我可以在 Spring Data ElasticSearch 中使用唯一组合字段吗?
Can I use unique combination field in Spring Data ElasticSearch?
我有一个spring数据弹性搜索文档如下:
@Document(indexName = "outlet")
public class OutletIndex implements IESMapper{
@Id
private String name;
private Long outletId;
private OutletType type;
private String address;
private String geoLocation;
private String city;
// getter and setter methods
}
我可以使 city
和 name
字段的组合唯一吗?在 spring 数据 jpa 中,我们可以使用 @UniqueConstraint
选项(How to introduce multi-column constraint with JPA annotations?)。 Spring data ES 中有什么方法可以实现吗?
除了 _uid
字段,Elasticsearch 中没有唯一性的概念,它是映射类型和文档 _id
的串联,例如outlet#someName
不使用 name
作为文档 @Id
,您可以创建另一个名为 cityName
的字段,它将 city
和 name
字段。仅此一项就可以保证没有两个文档具有相同的 city
和 name
字段值,即某种轻量级唯一性约束。
此外,如果您希望索引操作在索引具有相同 name/city 的第二个文档时失败,那么在创建新文档时,不要使用通常的索引 API PUT index/type/someNameSomeCity
你会像这样 _create
endpoint
`PUT index/type/123/someNameSomeCity/_create`
or
`PUT index/type/123/someNameSomeCity?op_type=create`
效果是,如果具有相同 someNameSomeCity
ID 的文档已经存在,则索引操作将失败,这也隐含地保证了某种唯一性。
我有一个spring数据弹性搜索文档如下:
@Document(indexName = "outlet")
public class OutletIndex implements IESMapper{
@Id
private String name;
private Long outletId;
private OutletType type;
private String address;
private String geoLocation;
private String city;
// getter and setter methods
}
我可以使 city
和 name
字段的组合唯一吗?在 spring 数据 jpa 中,我们可以使用 @UniqueConstraint
选项(How to introduce multi-column constraint with JPA annotations?)。 Spring data ES 中有什么方法可以实现吗?
除了 _uid
字段,Elasticsearch 中没有唯一性的概念,它是映射类型和文档 _id
的串联,例如outlet#someName
不使用 name
作为文档 @Id
,您可以创建另一个名为 cityName
的字段,它将 city
和 name
字段。仅此一项就可以保证没有两个文档具有相同的 city
和 name
字段值,即某种轻量级唯一性约束。
此外,如果您希望索引操作在索引具有相同 name/city 的第二个文档时失败,那么在创建新文档时,不要使用通常的索引 API PUT index/type/someNameSomeCity
你会像这样 _create
endpoint
`PUT index/type/123/someNameSomeCity/_create`
or
`PUT index/type/123/someNameSomeCity?op_type=create`
效果是,如果具有相同 someNameSomeCity
ID 的文档已经存在,则索引操作将失败,这也隐含地保证了某种唯一性。