新聞中心
es之索引別名的使用
- 別名有什么?
在開(kāi)發(fā)中,隨著業(yè)務(wù)需求的迭代,較?的業(yè)務(wù)邏輯就要?臨更新甚?是重構(gòu),?對(duì)于es來(lái)說(shuō),為了適應(yīng)新的業(yè)務(wù)邏輯,可能就要對(duì)原有的索引做?些修改,?如對(duì)某些字段做調(diào)整,甚?是重建索引。?做這些操作的時(shí)候,可能會(huì)對(duì)業(yè)務(wù)造成影響,甚?是停機(jī)調(diào)整等問(wèn)題。由此,es提供了索引別名來(lái)解決這些問(wèn)題。 索引別名就像?個(gè)快捷?式或是軟連接,可以指向?個(gè)或多個(gè)索引,也可以給任意?個(gè)需要索引名的API來(lái)使?。別名的應(yīng)?為程序提供了極?地靈活性。

- 查詢別名
GET /nba/_alias
GET /_alias
- 新增別名
POST /_aliases
{
"actions": [
{
"add": {
"index": "nba",
"alias": "nba_v1.0"
}
}
]
}
PUT /nba/_alias/nba_v1.1
- 刪除別名
POST /_aliases
{
"actions": [
{
"remove": {
"index": "nba",
"alias": "nba_v1.0"
}
}
]
}
DELETE /nba/_alias/nba_v1.1
- 重命名
POST /_aliases
{
"actions": [
{
"remove": {
"index": "nba",
"alias": "nba_v1.0"
}
},
{
"add": {
"index": "nba",
"alias": "nba_v2.0"
}
}
]
}
- 為多個(gè)索引指定?個(gè)別名
POST /_aliases
{
"actions": [
{
"add": {
"index": "nba",
"alias": "national_player"
}
},
{
"add": {
"index": "wnba",
"alias": "national_player"
}
}
]
}
- 為同個(gè)索引指定多個(gè)別名
POST /_aliases
{
"actions": [
{
"add": {
"index": "nba",
"alias": "nba_v2.1"
}
},
{
"add": {
"index": "nba",
"alias": "nba_v2.2"
}
}
]
}
- 通過(guò)別名讀索引
當(dāng)別名指定了?個(gè)索引,則查出?個(gè)索引。
GET /nba_v2.1
當(dāng)別名指定了多個(gè)索引,則查出多個(gè)索引。
GET /national_player
- 通過(guò)別名寫(xiě)索引
當(dāng)別名指定了?個(gè)索引,則可以做寫(xiě)的操作。
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"
}
當(dāng)別名指定了多個(gè)索引,可以指定寫(xiě)某個(gè)索引。
POST /_aliases
{
"actions": [
{
"add": {
"index": "nba",
"alias": "national_player",
"is_write_index": true
}
},
{
"add": {
"index": "wnba",
"alias": "national_player"
}
}
]
}
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"
}
es之如何重建索引
背景
Elasticsearch是?個(gè)實(shí)時(shí)的分布式搜索引擎,為?戶提供搜索服務(wù),當(dāng)我們決定存儲(chǔ)某種數(shù)據(jù)時(shí),在創(chuàng)建索引的時(shí)候需要將數(shù)據(jù)結(jié)構(gòu)完整確定下來(lái),于此同時(shí)索引的設(shè)定和很多固定配置將?不能改變。當(dāng)需要改變數(shù)據(jù)結(jié)構(gòu)時(shí),就需要重新建?索引,為此,Elastic團(tuán)隊(duì)提供了很多輔助?具幫助開(kāi)發(fā)?員進(jìn)?重建索引。
步驟
- nba取?個(gè)別名nba_latest, nba_latest作為對(duì)外使?。
- 新增?個(gè)索引nba_20220101,結(jié)構(gòu)復(fù)制于nba索引,根據(jù)業(yè)務(wù)要求修改字段。
- 將nba數(shù)據(jù)同步到nba_20220101。
- 給nba_20220101添加別名nba_latest,刪除nba別名nba_latest。
- 刪除nba索引。
我們對(duì)外提供訪問(wèn)nba索引時(shí)使?的是nba_latest別名
1.新增?個(gè)索引(?如修改字段類型,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"
}
}
}
}
2.將舊索引數(shù)據(jù)copy到新索引
同步等待,接?將會(huì)在 reindex 結(jié)束后返回。
POST /_reindex
{
"source": {
"index": "nba"
},
"dest": {
"index": "nba_20220101"
}
}
異步執(zhí)?,如果 reindex 時(shí)間過(guò)?,建議加上 wait_for_completion=false 的參數(shù)條件,這樣 reindex 將直接返回 taskId
POST /_reindex?wait_for_completion=false
{
"source": {
"index": "nba"
},
"dest": {
"index": "nba_20220101"
}
}
3.替換別名
POST /_aliases
{
"actions": [
{
"add": {
"index": "nba_20220101",
"alias": "nba_latest"
}
},
{
"remove": {
"index": "nba",
"alias": "nba_latest"
}
}
]
}
4.刪除舊索引
DELETE /nba
5.通過(guò)別名訪問(wèn)新索引
POST /nba_latest/_search
{
"query": {
"match": {
"displayNameEn": "james"
}
}
}
es之refresh操作
理想的搜索:
新的數(shù)據(jù)?添加到索引中??就能搜索到,但是真實(shí)情況不是這樣的。我們使?鏈?zhǔn)矫钫?qǐng)求,先添加?個(gè)?檔,再?刻搜索。
curl -X PUT localhost:9200/star/_doc/888 -H 'Content-Type:
application/json' -d '{ "displayName": "蔡徐坤" }'
curl -X GET localhost:9200/star/_doc/_search?pretty
強(qiáng)制刷新
curl -X PUT localhost:9200/star/_doc/666?refresh -H 'Content-Type:
application/json' -d '{ "displayName": "楊超越" }'
curl -X GET localhost:9200/star/_doc/_search?pretty
修改默認(rèn)更新時(shí)間(默認(rèn)時(shí)間是1s)
PUT /star/_settings
{
"index": {
"refresh_interval": "5s"
}
}
將refresh關(guān)閉
PUT /star/_settings
{
"index": {
"refresh_interval": "-1"
}
}
es之高亮查詢
前?
如果返回的結(jié)果集中很多符合條件的結(jié)果,那怎么能?眼就能看到我們想要的那個(gè)結(jié)果呢??如下??站所示的那樣,我們搜索 ?d課堂 ,在結(jié)果集中,將所有 ?d課堂 ?亮顯示?
高亮查詢
POST /nba_latest/_search
{
"query": {
"match": {
"displayNameEn": "james"
}
},
"highlight": {
"fields": {
"displayNameEn": {}
}
}
}
自定義高亮查詢
POST /nba_latest/_search
{
"query": {
"match": {
"displayNameEn": "james"
}
},
"highlight": {
"fields": {
"displayNameEn": {
"pre_tags": [
""
"
],
"post_tags": [
"
]
}
}
}
}
es之查詢建議
查詢建議是什么
- 查詢建議,是為了給?戶提供更好的搜索體驗(yàn)。包括:詞條檢查,?動(dòng)補(bǔ)全。
- 詞條檢查
- ?動(dòng)補(bǔ)全
Suggester
- Term suggester
- Phrase suggester
- Completion suggester
字段
Term suggester
term 詞條建議器,對(duì)給輸?的?本進(jìn)?分詞,為每個(gè)分詞提供詞項(xiàng)建議。
POST /nba_latest/_search
{
"suggest": {
"my-suggestion": {
"text": "jamse hardne",
"term": {
"suggest_mode": "missing",
"field": "displayNameEn"
}
}
}
}
Phrase suggester
phrase 短語(yǔ)建議,在term的基礎(chǔ)上,會(huì)考量多個(gè)term之間的關(guān)系,?如是否同時(shí)出現(xiàn)在索引的原??,相鄰程度,以及詞頻等。
POST /nba_latest/_search
{
"suggest": {
"my-suggestion": {
"text": "jamse harden",
"phrase": {
"field": "displayNameEn"
}
}
}
}
Completion suggester
Completion 完成建議。
POST /nba_latest/_search
{
"suggest": {
"my-suggestion": {
"text": "Miam",
"completion": {
"field": "teamCityEn"
}
}
}
}
網(wǎng)頁(yè)名稱:搜索引擎之ElasticSearch的高級(jí)使用
標(biāo)題網(wǎng)址:http://m.fisionsoft.com.cn/article/dpssooc.html


咨詢
建站咨詢
