【问题标题】:Can I use unique combination field in Spring Data ElasticSearch?我可以在 Spring Data ElasticSearch 中使用唯一的组合字段吗?
【发布时间】:2016-11-26 07:44:20
【问题描述】:

我有一个spring data弹性搜索文档如下:

@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 data jpa 中,我们可以使用@UniqueConstraint 选项(How to introduce multi-column constraint with JPA annotations?)。有没有办法在 Spring data ES 中实现呢?

【问题讨论】:

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


    【解决方案1】:

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

    您可以创建另一个名为cityName 的字段,而不是使用name 作为文档cityName,这将是cityname 字段的串联。仅此一项就可以保证没有两个文档具有相同的 cityname 字段值,即某种轻量级的唯一性约束。

    此外,如果您希望索引操作在索引具有相同名称/城市的第二个文档时失败,那么在创建新文档时,而不是使用 PUT index/type/someNameSomeCity 访问通常的索引 API,您会点击_create endpoint这样的

    `PUT index/type/123/someNameSomeCity/_create`
    or
    `PUT index/type/123/someNameSomeCity?op_type=create`
    

    效果将是,如果具有相同someNameSomeCity ID 的文档已经存在,则索引操作将失败,这也隐含地保证了某种唯一性。

    【讨论】:

    • 很高兴它有帮助!
    猜你喜欢
    • 1970-01-01
    • 2020-08-08
    • 2016-03-31
    • 2020-09-08
    • 2019-06-10
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 2017-09-17
    相关资源
    最近更新 更多