这是我参与8月更文挑战的第29天,活动详情查看:8月更文挑战
本Elasticsearch相关文章的版本为:7.4.2
在前一篇文章中,我们介绍了如何重新索引数据,但是我们需要修改应用中的索引名称,但是使用索引别名可以不用修改应用中的索引别名,实现应用零停机。
索引别名
索引别名就像Windows系统中的桌面快捷方式或者Linux系统中的软链接。
以Linux中的软链接为例:
假设某软件启动时读取的配置文件名为config.yml, 目前需要使用新的配置文件new_config.yml但是又不希望修改启动文件,那么我们可以使用软链接把config.yml指向new_config.yml即可。
xxxx -c config.yml
那么启动文件读取config.yml的时候实际上是读取new_config.yml的内容。
ln -s new_config.yml config.yml
那么在Elasticsearch中,也提供了这种类似的功能,那就是索引别名。以前一篇如何重新索引数据的测试索引为例,有以下背景情况:
- Elasticsearch中的重新索引前的索引名为
old_book_index - 通过alise接口为
old_book_index索引绑定别名book - 在应用服务中访问此索引时通过别名
book进行请求数据
PUT /old_book_index/_alias/book
现在我们进行数据重新索引操作:
POST /_reindex
{
"source": {
"index": "old_book_index"
},
"dest": {
"index": "new_book_index"
}
}
现在new_book_index才是我们应该访问的索引数据, 但是应用服务中通过别名book实际访问的是old_book_index。此时,我们只需要把book别名从索引old_book_index中移除,同时把book重新绑定到new_book_index, 这样应用服务在无需任何改动下通过别名book就可以访问正确的new_book_index索引数据了。
POST /_aliases
{
"actions": [
{ "remove": { "index": "old_book_index", "alias": "book" }},
{ "add": { "index": "new_book_index", "alias": "book" }}
]
}
此时,我们就可以通过索引别名book访问支持全文检索的description字段了:
POST /book/_search
{
"query": {
"match": {
"description": "guide"
}
}
}