環(huán)境
-
Elasticsearch 8.1 -
Kibana 8.1 -
MacOS 10.14.6
簡(jiǎn)介
首先我們還是先了解一下,什么是字段別名?大家可能聽(tīng)說(shuō)過(guò)索引別名,通過(guò)索引的別名可以輕松的切換所需的數(shù)據(jù)來(lái)源與哪一個(gè)索引,那么什么是字段別名呢?所謂字段別名,就是索引mapping定義時(shí)的備用字段,通過(guò)字段別名可以替換搜索請(qǐng)求中的目標(biāo)字段,字段別名可以用于搜索
,排序
,聚合
,高亮
,docvalue_fields
,stored_fields
,suggestions
,下面我們一起來(lái)看一下字段別名的詳細(xì)使用過(guò)程
使用
定義字段別名規(guī)范
-
必須是一個(gè)明確的字段,不能是一個(gè)對(duì)象或者指向另一個(gè)字段別名 -
在創(chuàng)建字段別名時(shí),字段別名指向的目標(biāo)字段必須已經(jīng)存在 -
如果定義了嵌套的對(duì)象,則字段別名必須具有同樣的嵌套范圍
字段別名只能指向一個(gè)字段,不能同時(shí)指向多個(gè)字段;
但是可以通過(guò)修改mapping
中的字段別名設(shè)置指向另一個(gè)新字段
不支持使用字段別名的API
-
首先是不能在寫(xiě)入數(shù)據(jù)的時(shí)候使用字段別名,因?yàn)楸旧碜侄蝿e名是虛擬的,不存在的,所以不支持寫(xiě)入,同樣也不能用于 copy_to
-
因?yàn)樽侄蔚膭e名是不存在 _source
中的,所以搜索請(qǐng)求時(shí)的過(guò)濾字段也是不會(huì)生效的
測(cè)試
-
創(chuàng)建索引,定義字段別名
其中創(chuàng)建了索引
blog1
和blog2
,各自定義了兩個(gè)字段別名public_count
和public_content
,在blog1
索引中,public_count
指向doc.count
,public_content
指向doc.content
;在blog2
索引中,public_count
指向doc_count
,public_content
指向doc_content
;PUT blog1 { "mappings": { "properties": { "doc": { "properties": { "count": { "type": "long" }, "content": { "type": "text", "fields": { "keyword": { "type": "keyword" } } } } }, "creater": { "type": "keyword" }, "public_count": { "type": "alias", "path": "doc.count" }, "public_content": { "type": "alias", "path": "doc.content" } } } } PUT blog2 { "mappings": { "properties": { "doc_count": { "type": "long" }, "doc_content": { "type": "text", "fields": { "keyword": { "type": "keyword" } } }, "creater": { "type": "keyword" }, "public_count": { "type": "alias", "path": "doc_count" }, "public_content": { "type": "alias", "path": "doc_content" } } } }
-
插入測(cè)試數(shù)據(jù)
POST _bulk { "index":{"_index":"blog1","_id":"1"}} {"creater":"zuiyu1","doc.count":"100","doc.content":"zuiyu elasticsearch "} { "index":{"_index":"blog1","_id":"2"}} {"creater":"zuiyu2","doc.count":"200","doc.content":"zuiyu vue"} { "index":{"_index":"blog1","_id":"3"}} {"creater":"zuiyu3","doc.count":"300","doc.content":"java demo"} { "index":{"_index":"blog1","_id":"4"}} {"creater":"zuiyu4","doc.count":"300","doc.content":"java demo plus"} { "index":{"_index":"blog1","_id":"5"}} {"creater":"zuiyu5","doc.count":"300","doc.content":"java pro and elasticsearch"} { "index":{"_index":"blog2","_id":"1"}} {"creater":"zuiyu1","doc_count":"10","doc_content":"醉魚(yú)ES小白入門(mén)課"} { "index":{"_index":"blog2","_id":"2"}} {"creater":"zuiyu2","doc_count":"550","doc_content":"醉魚(yú)前端 vue 小白入門(mén)課"} { "index":{"_index":"blog2","_id":"3"}} {"creater":"zuiyu3","doc_count":"60","doc_content":"醉魚(yú)java小白入門(mén)課"} { "index":{"_index":"blog2","_id":"4"}} {"creater":"zuiyu4","doc_count":"60","doc_content":"醉魚(yú)MySQL8.0小白入門(mén)課"} { "index":{"_index":"blog2","_id":"5"}} {"creater":"zuiyu5","doc_count":"60","doc_content":"醉魚(yú)Redis小白入門(mén)課"}
-
搜索測(cè)試、聚合、排序、高亮、建議
目標(biāo)是實(shí)現(xiàn)搜索索引
blog1
和blog2
中content
內(nèi)容中包含java
的文檔,因?yàn)閮蓚€(gè)索引的mapping
結(jié)構(gòu)完全不一樣,所以使用定義的相同名稱(chēng)的public_count
和public_content
-
聚合
使用
public_count
字段搜索索引blog1
和blog2
中public_count
大于100的文檔,對(duì)public_count
進(jìn)行聚合分桶GET blog*/_search?size=0 { "query": { "range": { "public_count": { "gte": 100 } } }, "aggs": { "all_agg": { "terms": { "field": "public_count" } } } }
-
排序
使用
public_count
字段搜索索引blog1
和blog2
中public_count
結(jié)果大于100的文檔,對(duì)public_count
進(jìn)行降序輸出GET blog*/_search { "query": { "range": { "public_count": { "gte": 100 } } }, "sort": [ { "public_count": { "order": "desc" } } ] }
-
高亮
使用
public_content
字段搜索索引blog1
和blog2
中包含java
的,高亮輸出,結(jié)果前后加上em
標(biāo)簽GET blog*/_search { "query": { "wildcard": { "public_content": { "value": "*java*" } } }, "highlight": { "fields": { "public_content": { "pre_tags": [ "<em>" ], "post_tags": [ "</em>" ] } } } }
-
建議
使用
public_count
字段搜索索引blog1
和blog2
中搜索public_content
中包含java
的文檔,輸入一個(gè)錯(cuò)誤單詞jave
,建議返回java
GET blog*/_search { "query": { "wildcard": { "public_content": { "value": "*java*" } } }, "suggest": { "YOUR_SUGGESTION": { "text": "jave", "term": { "field": "public_content" } } } }
-
_source
測(cè)試使用
_source
測(cè)試返回字段public_count
,public_content
,因?yàn)樽侄蝿e名是虛擬的,所以此時(shí)是沒(méi)有返回結(jié)果的GET blog*/_search { "query": { "wildcard": { "public_content": { "value": "*java*" } } }, "_source": [ "public_count", "public_content" ] }
-
使用
docvalue_fields
請(qǐng)求字段獲取GET blog*/_search { "query": { "wildcard": { "public_content": { "value": "*java*" } } }, "docvalue_fields": [ "public_count" ] }
-
使用場(chǎng)景
簡(jiǎn)單總結(jié)一下字段別名的使用場(chǎng)景:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-417825.html
-
文中的例子,可以對(duì)同一個(gè)人在不同博客網(wǎng)站上寫(xiě)的內(nèi)容進(jìn)行統(tǒng)計(jì) -
獲取采集的日志信息,不同的數(shù)據(jù)源,索引的日志mapping不一樣,統(tǒng)計(jì)時(shí)就可以使用字段別名進(jìn)行統(tǒng)一的統(tǒng)計(jì)
本文由 mdnice 多平臺(tái)發(fā)布文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-417825.html
到了這里,關(guān)于Elasticsearch 字段別名 field-alias的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!