环境
- Elasticsearch 8.1
- Kibana 8.1
- MacOS 10.14.6
简介
首先咱们还是先理解一下,什么是字段别名?大家可能据说过 索引别名 ,通过索引的别名能够轻松的切换所需的数据起源与哪一个索引,那么什么是字段别名呢?所谓字段别名,就是索引 mapping 定义时的备用字段,通过字段别名能够替换搜寻申请中的指标字段,字段别名能够用于 搜寻
, 排序
, 聚合
, 高亮
,docvalue_fields
,stored_fields
,suggestions
,上面咱们一起来看一下字段别名的具体应用过程
应用
定义字段别名标准
- 必须是一个明确的字段,不能是一个对象或者指向另一个字段别名
- 在创立字段别名时,字段别名指向的指标字段必须曾经存在
- 如果定义了嵌套的对象,则字段别名必须具备同样的嵌套范畴
字段别名只能指向一个字段,不能同时指向多个字段;
然而能够通过批改 mapping
中的字段别名设置指向另一个新字段
不反对应用字段别名的 API
- 首先是不能在写入数据的时候应用字段别名,因为自身字段别名是虚构的,不存在的,所以不反对写入,同样也不能用于
copy_to
- 因为字段的别名是不存在
_source
中的,所以搜寻申请时的过滤字段也是不会失效的
测试
-
创立索引,定义字段别名
其中创立了索引
blog1
和blog2
, 各自定义了两个字段别名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" } } } }
-
插入测试数据
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":"醉鱼 ES 小白入门课"} {"index":{"_index":"blog2","_id":"2"}} {"creater":"zuiyu2","doc_count":"550","doc_content":"醉鱼前端 vue 小白入门课"} {"index":{"_index":"blog2","_id":"3"}} {"creater":"zuiyu3","doc_count":"60","doc_content":"醉鱼 java 小白入门课"} {"index":{"_index":"blog2","_id":"4"}} {"creater":"zuiyu4","doc_count":"60","doc_content":"醉鱼 MySQL8.0 小白入门课"} {"index":{"_index":"blog2","_id":"5"}} {"creater":"zuiyu5","doc_count":"60","doc_content":"醉鱼 Redis 小白入门课"}
-
搜寻测试、聚合、排序、高亮、倡议
指标是实现搜寻索引
blog1
和blog2
中content
内容中蕴含java
的文档, 因为两个索引的mapping
构造齐全不一样,所以应用定义的雷同名称的public_count
和public_content
-
聚合
应用
public_count
字段搜寻索引blog1
和blog2
中public_count
大于 100 的文档,对public_count
进行聚合分桶GET blog*/_search?size=0 { "query": { "range": { "public_count": {"gte": 100} } }, "aggs": { "all_agg": { "terms": {"field": "public_count"} } } }
-
排序
应用
public_count
字段搜寻索引blog1
和blog2
中public_count
后果大于 100 的文档, 对public_count
进行降序输入GET blog*/_search { "query": { "range": { "public_count": {"gte": 100} } }, "sort": [ { "public_count": {"order": "desc"} } ] }
-
高亮
应用
public_content
字段搜寻索引blog1
和blog2
中蕴含java
的,高亮输入,后果前后加上em
标签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
的文档,输出一个谬误单词jave
, 倡议返回java
GET blog*/_search { "query": { "wildcard": { "public_content": {"value": "*java*"} } }, "suggest": { "YOUR_SUGGESTION": { "text": "jave", "term": {"field": "public_content"} } } }
-
_source
测试应用
_source
测试返回字段public_count
,public_content
,因为字段别名是虚构的,所以此时是没有返回后果的GET blog*/_search { "query": { "wildcard": { "public_content": {"value": "*java*"} } }, "_source": [ "public_count", "public_content" ] }
-
应用
docvalue_fields
申请字段获取GET blog*/_search { "query": { "wildcard": { "public_content": {"value": "*java*"} } }, "docvalue_fields": ["public_count"] }
应用场景
简略总结一下字段别名的应用场景:
- 文中的例子,能够对同一个人在不同博客网站上写的内容进行统计
- 获取采集的日志信息,不同的数据源,索引的日志 mapping 不一样,统计时就能够应用字段别名进行对立的统计
本文由 mdnice 多平台公布