搜索引擎之Elastic Search的高级使用
在开发中,随着业务需求的引擎用迭代,较⽼的搜索业务逻辑就要⾯临更新甚⾄是重构,⽽对于es来说,引擎用为了适应新的搜索业务逻辑,可能就要对原有的引擎用索引做⼀些修改,⽐如对某些字段做调整,搜索甚⾄是引擎用重建索引。⽽做这些操作的搜索时候,可能会对业务造成影响,引擎用甚⾄是搜索停机调整等问题。由此,引擎用es提供了索引别名来解决这些问题。搜索 索引别名就像⼀个快捷⽅式或是引擎用软连接,可以指向⼀个或多个索引,搜索也可以给任意⼀个需要索引名的API来使⽤。别名的应⽤为程序提供了极⼤地灵活性。
查询别名 复制GET /nba/_alias
GET /_alias1.2. 新增别名 复制POST /_aliases
{ "actions": [ { "add": { "index": "nba", "alias": "nba_v1.0" } } ]}1.2.3.4.5.6.7.8.9.10.11. 复制PUT /nba/_alias/nba_v1.11. 删除别名 复制POST /_aliases
{ "actions": [ { "remove": { "index": "nba", "alias": "nba_v1.0" } } ]}1.2.3.4.5.6.7.8.9.10.11. 复制DELETE /nba/_alias/nba_v1.11. 重命名 复制POST /_aliases
{ "actions": [ { "remove": { "index": "nba", "alias": "nba_v1.0" } }, { "add": { "index": "nba", "alias": "nba_v2.0" } } ]}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17. 为多个索引指定⼀个别名 复制POST /_aliases
{ "actions": [ { "add": { "index": "nba", "alias": "national_player" } }, { "add": { "index": "wnba", "alias": "national_player" } } ]}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17. 为同个索引指定多个别名 复制POST /_aliases
{ "actions": [ { "add": { "index": "nba", "alias": "nba_v2.1" } }, { "add": { "index": "nba", "alias": "nba_v2.2" } } ]}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17. 通过别名读索引当别名指定了⼀个索引,则查出⼀个索引。
复制GET /nba_v2.11.当别名指定了多个索引,则查出多个索引。
复制GET /national_player1. 通过别名写索引当别名指定了⼀个索引,WordPress模板则可以做写的操作。
复制POST /nba_v2.1/_doc/566{ "countryEn": "Croatia", "teamName": "快船", "birthDay": 858661200000, "country": "克罗地亚", "teamCityEn": "LA", "code": "ivica_zubac", "displayAffiliation": "Croatia", "displayName": "伊维察 祖巴茨哥哥", "schoolType": "", "teamConference": "⻄部", "teamConferenceEn": "Western", "weight": "108.9 公⽄", "teamCity": "洛杉矶", "playYear": 3, "jerseyNo": "40", "teamNameEn": "Clippers", "draft": 2016, "displayNameEn": "Ivica Zubac", "heightValue": 2.16, "birthDayStr": "1997-03-18", "position": "中锋", "age": 22, "playerId": "1627826"}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.当别名指定了多个索引,可以指定写某个索引。
复制POST /_aliases
{ "actions": [ { "add": { "index": "nba", "alias": "national_player", "is_write_index": true } }, { "add": { "index": "wnba", "alias": "national_player" } } ]}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18. 复制POST /national_player/_doc/566{ "countryEn": "Croatia", "teamName": "快船", "birthDay": 858661200000, "country": "克罗地亚", "teamCityEn": "LA", "code": "ivica_zubac", "displayAffiliation": "Croatia", "displayName": "伊维察 祖巴茨妹妹", "schoolType": "", "teamConference": "⻄部", "teamConferenceEn": "Western", "weight": "108.9 公⽄", "teamCity": "洛杉矶", "playYear": 3, "jerseyNo": "40", "teamNameEn": "Clippers", "draft": 2016, "displayNameEn": "Ivica Zubac", "heightValue": 2.16, "birthDayStr": "1997-03-18", "position": "中锋", "age": 22, "playerId": "1627826"}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.es之如何重建索引
背景Elasticsearch是⼀个实时的分布式搜索引擎,为⽤户提供搜索服务,当我们决定存储某种数据时,在创建索引的时候需要将数据结构完整确定下来,于此同时索引的设定和很多固定配置将⽤不能改变。当需要改变数据结构时,就需要重新建⽴索引,为此,Elastic团队提供了很多辅助⼯具帮助开发⼈员进⾏重建索引。
步骤nba取⼀个别名nba_latest, nba_latest作为对外使⽤。新增⼀个索引nba_20220101,结构复制于nba索引,根据业务要求修改字段。将nba数据同步到nba_20220101。给nba_20220101添加别名nba_latest,删除nba别名nba_latest。删除nba索引。我们对外提供访问nba索引时使⽤的是nba_latest别名1.新增⼀个索引(⽐如修改字段类型,jerseyNo改成keyword类型)
复制PUT /nba_20220101
{ "mappings": { "properties": { "age": { "type": "integer" }, "birthDay": { "type": "date" }, "birthDayStr": { "type": "keyword" }, "code": { "type": "text" }, "country": { "type": "keyword" }, "countryEn": { "type": "keyword" }, "displayAffiliation": { "type": "text" }, "displayName": { "type": "text" }, "displayNameEn": { "type": "text" }, "draft": { "type": "long" }, "heightValue": { "type": "float" }, "jerseyNo": { "type": "keyword" }, "playYear": { "type": "long" }, "playerId": { "type": "keyword" }, "position": { "type": "text" }, "schoolType": { "type": "text" }, "teamCity": { "type": "text" }, "teamCityEn": { "type": "text" }, "teamConference": { "type": "keyword" }, "teamConferenceEn": { "type": "keyword" }, "teamName": { "type": "keyword" }, "teamNameEn": { "type": "keyword" }, "weight": { "type": "text" } } }}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.75.76.2.将旧索引数据copy到新索引
同步等待,接⼝将会在 reindex 结束后返回。
复制POST /_reindex
{ "source": { "index": "nba" }, "dest": { "index": "nba_20220101" }}1.2.3.4.5.6.7.8.9.异步执⾏,如果 reindex 时间过⻓,建议加上 wait_for_completion=false 的亿华云参数条件,这样 reindex 将直接返回 taskId
复制POST /_reindex?wait_for_completion=false{ "source": { "index": "nba" }, "dest": { "index": "nba_20220101" }}1.2.3.4.5.6.7.8.9.3.替换别名
复制POST /_aliases
{ "actions": [ { "add": { "index": "nba_20220101", "alias": "nba_latest" } }, { "remove": { "index": "nba", "alias": "nba_latest" } } ]}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.4.删除旧索引
复制DELETE /nba1.5.通过别名访问新索引
复制POST /nba_latest/_search
{ "query": { "match": { "displayNameEn": "james" } }}1.2.3.4.5.6.7.8. es之refresh操作理想的搜索:
新的数据⼀添加到索引中⽴⻢就能搜索到,但是真实情况不是这样的。我们使⽤链式命令请求,先添加⼀个⽂档,再⽴刻搜索。
复制curl -X PUT localhost:9200/star/_doc/888 -H Content-Type:application/json -d { "displayName": "蔡徐坤" }curl -X GET localhost:9200/star/_doc/_search?pretty1.2.3.强制刷新
复制curl -X PUT localhost:9200/star/_doc/666?refresh -H Content-Type:application/json -d { "displayName": "杨超越" }curl -X GET localhost:9200/star/_doc/_search?pretty1.2.3.修改默认更新时间(默认时间是1s)
复制PUT /star/_settings
{ "index": { "refresh_interval": "5s" }}1.2.3.4.5.6.将refresh关闭
复制PUT /star/_settings
{ "index": { "refresh_interval": "-1" }}1.2.3.4.5.6. es之高亮查询前⾔
如果返回的结果集中很多符合条件的结果,那怎么能⼀眼就能看到我们想要的那个结果呢?⽐如下⾯⽹站所示的那样,我们搜索 ⼩d课堂 ,在结果集中,将所有 ⼩d课堂 ⾼亮显示?

高亮查询
复制POST /nba_latest/_search
{ "query": { "match": { "displayNameEn": "james" } }, "highlight": { "fields": { "displayNameEn": {}} }}1.2.3.4.5.6.7.8.9.10.11.12.13.自定义高亮查询
复制POST /nba_latest/_search
{ "query": { "match": { "displayNameEn": "james" } }, "highlight": { "fields": { "displayNameEn": { "pre_tags": [ "<h1>" ], "post_tags": [ "</h1>" ] } } }}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20. es之查询建议查询建议是什么
查询建议,是为了给⽤户提供更好的搜索体验。包括:词条检查,⾃动补全。词条检查

Suggester
Term suggesterPhrase suggesterCompletion suggester字段

Term suggester
term 词条建议器,对给输⼊的⽂本进⾏分词,为每个分词提供词项建议。
复制POST /nba_latest/_search
{ "suggest": { "my-suggestion": { "text": "jamse hardne", "term": { "suggest_mode": "missing", "field": "displayNameEn" } } }}1.2.3.4.5.6.7.8.9.10.11.12.Phrase suggester
phrase 短语建议,在term的亿华云计算基础上,会考量多个term之间的关系,⽐如是否同时出现在索引的原⽂⾥,相邻程度,以及词频等。
复制POST /nba_latest/_search
{ "suggest": { "my-suggestion": { "text": "jamse harden", "phrase": { "field": "displayNameEn" } } }}1.2.3.4.5.6.7.8.9.10.11.Completion suggester
Completion 完成建议。
复制POST /nba_latest/_search
{ "suggest": { "my-suggestion": { "text": "Miam", "completion": { "field": "teamCityEn" } } }}1.2.3.4.5.6.7.8.9.10.11.相关文章
Win10系统如何关闭自动更新(停用Win10系统的自动更新功能以保持更大控制权)
摘要:随着技术的不断进步和软件的更新换代,操作系统的自动更新功能成为了维持系统稳定性和安全性的一种重要手段。然而,对于一些用户来说,自动更新可能会导致诸如软件冲突、网络占用、不受控制等问...2025-11-05
上次我们项目不是把 MySQL 高可用部署好了么,MySQL 双主模式 + Keepalived,来保证高可用。简单来说就是有两个 MySQL 主节点,分别有两个 Keepalived 安装在宿主机上2025-11-05
前 言读写分离方案上线后,订单sql查询时间再一次稳定在了300ms以下,此时对数据的增删改操作会走主库,而读请求会走从库,通过读写分离大大提升了数据读的处理能力,但遗憾的是没办法提升主库写数据的能力2025-11-05
数据库行业半年度回顾“多元化+差异化”的齐头并进2022年上半年,各数据库厂商及产品都取得了长足的进步,在某些重点技术领域的突破,无论是产品还是市场方面都得到了不错的反馈,特别是以国产化、云为代表的厂2025-11-05新3路由网刷教程(一步步教你如何刷机,让新3路由器发挥更大的作用)
摘要:近年来,随着人们对网络的需求日益增长,家庭中使用路由器的普及率也逐渐提高。而新3路由网作为一款功能强大、稳定可靠的路由器,吸引了越来越多的用户。然而,对于一些热爱折腾、追求个性化的...2025-11-05- 复制/usr/local/nagios/bin/nagios-v/usr/local/nagios/etc/nagios.cfg 1.2.2025-11-05

最新评论