我可以在 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

}

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

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

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

此外,如果您希望索引操作在索引具有相同 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 的文档已经存在,则索引操作将失败,这也隐含地保证了某种唯一性。