我有一个弹簧数据弹性搜索文档如下:
@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数据ES中实现它?
答案 0 :(得分:1)
除了_uid
字段之外,Elasticsearch中没有unicity的概念,_id
字段是映射类型和文档outlet#someName
的串联,例如name
您可以创建另一个名为@Id
的字段,而不是使用cityName
作为文档city
,该字段可以是name
和{{1}的串联}字段。仅这一点就可以保证没有两个文档具有相同的city
和name
字段值,即某种轻量级的unicity约束。
此外,如果您希望索引操作失败,如果索引了具有相同名称/城市的第二个文档,那么,在创建新文档时,不要使用PUT index/type/someNameSomeCity
点击常用索引API,而是#39 ; d像这样点击_create
endpoint
`PUT index/type/123/someNameSomeCity/_create`
or
`PUT index/type/123/someNameSomeCity?op_type=create`
效果将是如果已存在具有相同someNameSomeCity
ID的文档,则索引操作将失败,这也隐含地保证了某种单一性。