我可以在Spring Data ElasticSearch中使用唯一的组合字段吗?

时间:2016-11-26 07:44:21

标签: elasticsearch spring-boot spring-data spring-data-elasticsearch

我有一个弹簧数据弹性搜索文档如下:

@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

}

我可以将cityname字段的组合设为唯一吗?在spring数据jpa中,我们可以使用@UniqueConstraint选项(How to introduce multi-column constraint with JPA annotations?)。有没有办法在Spring数据ES中实现它?

1 个答案:

答案 0 :(得分:1)

除了_uid字段之外,Elasticsearch中没有unicity的概念,_id字段是映射类型和文档outlet#someName的串联,例如name

您可以创建另一个名为@Id的字段,而不是使用cityName作为文档city,该字段可以是name和{{1}的串联}字段。仅这一点就可以保证没有两个文档具有相同的cityname字段值,即某种轻量级的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的文档,则索引操作将失败,这也隐含地保证了某种单一性。