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