Elasticsearch中的唯一约束

时间:2016-01-26 07:25:27

标签: elasticsearch unique-constraint

我需要在索引时拒绝在同一个字段中找到相同字段的相同值。例如,如果我使用一个用户名注册,下次我不应该使用相同的用户名注册,就像我们如何使用唯一其他数据库中的约束oracle,mysql等...有人可以帮助我在ElasticSearch中实现这个目的。

谢谢, SP

1 个答案:

答案 0 :(得分:0)

如果用户名是唯一的,您可以将其用作文档的_id。 例如,您使用批量请求索引您的username1:

POST /_bulk
{ "create" : { "_index" : "myindex", "_type" : "mytype", "_id" : "username1" } }
{ "name" : "username1", "adress" : "adress of my username.." }

结果将是:

"create": {
            "_index": "myindex",
            "_type": "mytype",
            "_id": "username1",
            "_version": 1,
            "status": 201
         }

然后,如果您尝试使用相同的ID“username1”索引新文档:

POST /_bulk
{ "create" : { "_index" : "myindex", "_type" : "mytype", "_id" : "username1" } }
{ "name" : "name2", "adress" : "adress of my username.." }

你会得到一个例外:

"create": {
            "_index": "myindex",
            "_type": "mytype",
            "_id": "username1",
            "status": 409,
            "error": "DocumentAlreadyExistsException[[myindex][3] [mytype][username1]: document already exists]"
         }

当然,如果需要,您仍然可以更新您的用户名:

POST /_bulk
{ "update" : { "_index" : "myindex", "_type" : "mytype", "_id" : "username1" } }
{ "doc" : {"name" : "updatedusername1", "adress" : "adress of my username.." }}

这将返回:

"update": {
            "_index": "myindex",
            "_type": "mytype",
            "_id": "username1",
            "_version": 2,
            "status": 200
         }

注意"_version": 2

希望这个帮助