ElasticSearch1-官方文档翻译(概念,搜索,聚合篇)
文章目录
- 全文搜索
- 1.Getting start
- basic concepts
- 搜索原理
- 倒排索引原理:
- 对索引
- 对文档
- 2. 搜索Search API
- 2.1 query string search
- 2.2 DSL查询(生产环境使用)
- 2.3 带过滤的搜索query filter
- 2.4 全文搜索full-text search
- 3. Aggregations API
- 3.1 普通聚合 结果(查询结果解析)
- 3.2搜索后聚合
- 3.3 分组聚合
- Date Histogram聚合
- 4.分词器
- 4.1 分词流程
- 4.2 内置分词器
- 4.3 安装中文分词器analysis-ik 6.2.4
- _bluk
关系数据库 ⇒ 数据库 ⇒ 表 ⇒ 行 ⇒ 列(Columns)
Elasticsearch ⇒ 索引(Index) ⇒ 类型(type) ⇒ 文档(Docments) ⇒ 字段(Fields)
download :https://www.elastic.co/cn/downloads/elasticsearch
全文搜索
结构化数据------>关系型数据库存储,查找
非结构化数据—>1.顺序扫描法(从头到尾) 2. 全文搜索(建立文本库,创建索引搜索)
全文搜索实现ElasticSearch
1.Getting start
ES本身使用的是UDP协议, 该协议没有握手机制,也无法保证通讯过程中数据不丢失
9300 是tcp通讯端口,集群间和TCPClient都走的它
9200 是http协议的RESTful接口
basic concepts
- 基于java语言,Lucene引擎
- 高度可扩展的开源全文搜索和分析引擎
- 快速,近实时(near realtime NRT)的对大数据的存储和搜索、分析
- 异步写入
- 自身带有分布式,solr需要依赖zookeeper ,solr支持xml,json等格式
基于HTTP协议,以JSON为数据交互格式的RESTful API
数据存储在安装目录data下
测试ES启动成功 http://localhost:9200?pretty
搜索原理
插入这些数据到Elasticsearch的同时,Elasticsearch还为数据的每个字段建立索引–倒排索引
倒排索引(inverted index) 的结构来做快速的全文搜索
倒排索引由在文档中出现的唯一的单词列表,以及对于每个单词在文档中的位置组成。
倒排索引原理:
https://es.xiaoleilu.com/052_Mapping_Analysis/35_Inverted_index.html
倒排索引中的所有词项对应一个或多个文档
倒排索引中的词项根据字典顺序升序排列
对索引
List All Indicescurl localhost:9200/_cat/indices?v
添加索引curl -X PUT http://0.0.0.0:9200/customer?pretty
删除索引curl -X DELETE 'localhost:9200/customer?pretty'
https://blog.csdn.net/zhangbin666/article/details/73332538
对文档
添加文档
curl -H "Content-Type:application/json" -H "Data_Type:msg" -X POST --data '{"first_name" : "Zhao","last_name" : "Jianyu","age" : 22,"about" : "I love to go rock climbing","interests": [ "music" ]
}' localhost:9200/megacorp/employee/2
搜索文档/删除GET/delete /megacorp/employee/1
DSL删除文档_delete_by_query
curl -H "Content-Type:application/json" -X POST --data '{"query": {"bool": {"filter": [{"exists": {"field": "record_file","boost": 1}},{"term": {"account_login_name": {"value": "3004703","boost": 1}}},{"range": {"channel_time": {"from": 1565280000,"to": 1565971199,"include_lower": true,"include_upper": true,"boost": 1}}},{"bool": {"must_not": [{"exists": {"field": "asr_customer","boost": 1}},{"exists": {"field": "asr_agent","boost": 1}},{"exists": {"field": "stat_silence_rate","boost": 1}}],"adjust_pure_negative": true,"boost": 1}},{"bool": {"should": [{"terms": {"cdr_type": ["cdr_ib","cdr_ob_agent","cdr_ob_customer"],"boost": 1}}],"adjust_pure_negative": true,"boost": 1}}],"adjust_pure_negative": true,"boost": 1}}
}' 'localhost:9200/index_20190809_alias%2Cindex_20190810_alias/type/_delete_by_query'
更新文档POST
替换文档PUT
查询总数
curl -XGET http://localhost:9200/_count?pretty
http://**.**.***.**:9200/_count?pretty `?pretty`使请求返回参数将JSON数据
2. 搜索Search API
六种搜索:
phrase search
highlight search
2.1 query string search
搜索全部文档 GET /megacorp/employee/_search
条件搜索 curl 'localhost:9200/megacorp/employee/_search?q=first_name:zhao'
按照价格降序搜索(不常用)GET /ecommerce/product/_search?q=name:yagao&sort=price:desc
2.2 DSL查询(生产环境使用)
DSL(Domain Specific Language特定领域语言)
“query”: {
match 进行分词
,包含这三个词中的一个或多个的文档就会被搜索出来。
match_phrase 完全匹配,包含所有
multi_match 对多个字段进行匹配
term 是代表完全匹配
,即不进行分词器分析,文档中必须包含整个搜索的词汇(数值型,日期型)
terms
bool 联合查询: must,should,must_not
https://blog.csdn.net/tanga842428/article/details/75127418
https://www.jianshu.com/p/0e503c6dcf89
match语句–查询类型之一
GET /megacorp/employee/_search
{"query" : {"match" : {"last_name" : "Smith"}}
}
curl -H "Content-Type:application/json" -H "Data_Type:msg" -X GET --data '{"query" : {"match" : {"last_name" : "Smith"}}
}' 'localhost:9200/megacorp/employee/_search'
2.3 带过滤的搜索query filter
过滤器(filter)用于执行区间搜索
GET /megacorp/employee/_search
{"query" : {"filtered" : {"filter" : {"range" : {"age" : { "gt" : 30 } }},"query" : {"match" : {"last_name" : "smith"}}}}
}
2.4 全文搜索full-text search
从about
字段中搜索"rock climbing"
GET /megacorp/employee/_search
{"query" : {"match" : {"about" : "rock climbing"}}
}
搜索结果
{..."hits": {"total": 2,"max_score": 0.16273327,"hits": [{..."_score": 0.16273327, <1> 结果相关性评分"_source": {"first_name": "John","last_name": "Smith","age": 25,"about": "I love to go rock climbing","interests": [ "sports", "music" ]}},{..."_score": 0.016878016, "_source": {"first_name": "Jane","last_name": "Smith","age": 32,"about": "I like to collect rock albums","interests": [ "music" ]}}]}
}
参考文章:https://www.jianshu.com/p/873a363de2ee
{"size":10, 搜索10个"query":{"bool":{"adjust_pure_negative":true,"boost":1}},"_source":true 是否显示结果
}
3. Aggregations API
// 质检总数
.subAggregation(AggregationBuilders.filter("qcCount", QueryBuilders.boolQuery().should(QueryBuilders.existsQuery("qc_review_score")).should(QueryBuilders.existsQuery("qc_score"))))
// 自动质检总分
.subAggregation(AggregationBuilders.filter("autoQcScoreCountFilter", QueryBuilders.boolQuery().must(QueryBuilders.existsQuery("qcScore")).mustNot(QueryBuilders.existsQuery("qcReviewScore"))).subAggregation(AggregationBuilders.sum("qcScoreCount").field("qcScore").missing(0)))
// 人工复合总分 (进行自动质检后被人工修改过的总分 + 未进行自动质检直接被人工评分的总分).subAggregation(AggregationBuilders.filter("qcReviewScoreCountFilter", QueryBuilders.boolQuery().filter(QueryBuilders.existsQuery(AsrField.QC_REVIEW_SCORE))).subAggregation(AggregationBuilders.sum("qcScoreCount").field(AsrField.QC_REVIEW_SCORE).missing(0)))
数据上生成复杂的分析统计。它很像SQL中的GROUP BY但是功能更强大。
curl -H "Content-Type:application/json" -H "Data_Type:msg" -X GET --data '
{"aggs": {"all_interests": {"terms": { "field": "interests" }}}
}' 'localhost:9200/megacorp/employee/_search'
聚合遇到的问题
5.x后对排序,聚合这些操作用单独的数据结构(fielddata)缓存到内存里了,需要单独开启
参考文章:https://blog.csdn.net/u011403655/article/details/71107415/
3.1 普通聚合 结果(查询结果解析)
{"took": 10, 花费的时间,单位毫秒"timed_out": false, 是否超时, false表示没有超时"_shards": {"total": 5, 数据拆成了5个分片"successful": 5, "skipped": 0, "failed": 0}, "hits": {"total": 4, 查询结果的数量,4个document"max_score": 1, 越相关,就越匹配,分数也越高"hits": [ 包含了匹配搜索的document的详细数据{"_index": "megacorp", "_type": "employee", "_id": "2", "_score": 1, "_source": {"first_name": "Zhao", "last_name": "Jianyu", "age": 22, "about": "I love to go rock climbing", "interests": ["music"]}}, {"_index": "megacorp", 索引名"_type": "employee", 类型名"_id": "4", "_score": 1, "_source": {"first_name": "Zhao", "last_name": "Jianyu", "age": 22, "about": "I love to go rock climbing", "interests": ["music"]}}, {...已省略数据}]}, "aggregations": { 聚合:实时的从匹配查询语句的文档中动态计算生成的"all_interests": {"doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [{"key": "music", "doc_count": 3 喜欢音乐3人}, {"key": "play", "doc_count": 1 喜欢玩 1人}, {"key": "sports", "doc_count": 1}]}}
}
3.2搜索后聚合
curl -H "Content-Type:application/json" -H "Data_Type:msg" -X GET --data '
{"query": {"match": {"last_name": "jianyu"}},"aggs": {"all_interests": {"terms": {"field": "interests"}}}
}' 'localhost:9200/megacorp/employee/_search'
结果:
{...省略部分结果"hits": {"total": 2, 只查询出和query语句相匹配的文档"max_score": 0.18232156, "hits": [{"_index": "megacorp", "_type": "employee", "_id": "2", "_score": 0.18232156, "_source": {"first_name": "Zhao", "last_name": "Jianyu", "age": 22, "about": "I love to go rock climbing", "interests": ["music"]}}, {"_index": "megacorp", "_type": "employee", "_id": "4", "_score": 0.18232156, "_source": {"first_name": "Zhao", "last_name": "Jianyu", "age": 22, "about": "I love to go rock climbing", "interests": ["music"]}}]}, "aggregations": { 对查询出结果的文档进行聚合"all_interests": {"doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ 桶{"key": "music", "doc_count": 2}]}}
}
3.3 分组聚合
根据兴趣分组 求平均年龄
curl -H "Content-Type:application/json" -H "Data_Type:msg" -X GET --data '
{"aggs" : {"all_interests" : {"terms" : { "field" : "interests" },"aggs" : {"avg_age" : {"avg" : { "field" : "age" }}}}}
}' 'localhost:9200/megacorp/employee/_search'
搜索结果:
{"aggregations": {"all_interests": {"doc_count_error_upper_bound": 0, 表示没有在这次聚合中返回、但是可能存在的潜在聚合结果"sum_other_doc_count": 0, 表示这次聚合中没有统计到的文档数。因为ES为分布式部署,"buckets": [{ 不同文档分散于多个分片"key": "music", "doc_count": 3, "avg_age": {"value": 23 喜欢音乐的平均年龄23岁}}, {"key": "play", "doc_count": 1, "avg_age": {"value": 33}}, {"key": "sports", "doc_count": 1, "avg_age": {"value": 25}}]}}
}
Date Histogram聚合
4.分词器
实现倒排索引分词
从文本中切分出一个一个的词条,并对每个词条标准化
4.1 分词流程
3.1.1 character filter 分词之前的预处理 (过滤html标签,特殊符号转化)
3.1.2 tokenizer 分词
3.1.3 token filter 标准化 (大小写转换,同义词转化)
4.2 内置分词器
3.2.1 standard 分词器 : (默认)将词汇单元转成小写|去除停用词[a,an,the]和标点符号,支持中文采用的方法单子切分
3.2.2 simple 分词器 : 首先通过非字母字符分割文本信息|然后将词汇单元转成小写&&去除数字类型字符|
3.2.3 Whitespace : 仅仅去除空格 不支持中文
3.2.4 language : 为特定语言制定的分词器 不支持中文
4.3 安装中文分词器analysis-ik 6.2.4
git上下载
字段
if coord factor is enabled (by default "disable_coord": false) then it means: if we have more search keywords in text then this result would be more relevant and will get higher score.
if coord factor is disabled(“disable_coord”: true) then it means: no matter how many keywords we have in search text it will be counted just once.
如果启用coord因子(默认情况下为“disadycoord”:false),那么它意味着:如果文本中有更多的搜索关键字,那么这个结果将更相关并获得更高的分数。
如果coord因子被禁用(“disablecoord”:true),那么它的意思是:无论搜索文本中有多少关键字,它都只被计算一次。
分词模式
_bluk
bulk size最佳大小
bulk request会加载到内存里,如果太大的话,性能反而会下降,因此需要反复尝试一个最佳的bulk size。一般从1000~ 5000条数据开始,尝试逐渐增加。另外,如果看大小的话,最好是在5~15MB之间。
究其原因是 ES本身使用的是UDP协议, 该协议没有握手机制,也无法保证通讯过程中数据不丢失
bulk线程池满了的产生拒绝的问题。
同时可以看一下es端的日志,有异常也会在日志里面展示的
https://www.cnblogs.com/jianxuanbing/p/9410800.html
ElasticSearch1-官方文档翻译(概念,搜索,聚合篇)相关推荐
- django 1.8 官方文档翻译: 2-5-4 聚合 (初稿)
Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质. 交流群:467338606 网站:http://python.usyiyi.cn/django/index.html ...
- Pulsar官方文档翻译-概念和架构-多租户(Multi Tenancy)
官网原文标题<Multi Tenancy> 翻译时间:2018-10-28 官网原文地址:http://pulsar.apache.org/docs/en/concepts-multi-t ...
- 【iOS官方文档翻译】iOS蓝牙的基本概念
之前写了[iOS官方文档翻译]iOS的蓝牙连接.数据接收及发送一文,介绍了怎样进行蓝牙通讯,但是很多基本概念没有进行解释,看起来可能有点吃力,所以现在再翻译一篇苹果对官方蓝牙4.0一些基本概念介绍的文 ...
- Vue3官方文档翻译之Reactivity Fundamentals
引言 突然不知道这章写了啥, 感觉内容有点干, 顾着翻译去了, 没有吸收消化. 还是总结下, 主要是就是响应式的对象如何和template结合的, 响应式对象是通过JavaScript的代理对象实现的 ...
- 欢迎参与 KubeVela 官方文档翻译活动
来源 | 阿里巴巴云原生公众号 背景 KubeVela v1.0 启用了新的官网架构和文档维护方式,新增功能包括文档版本化控制.i18n 国际化以及自动化流程.但目前 KubeVela 官方文档只有英 ...
- 【KubeVela 官方文档翻译】,欢迎大家踊跃参与
简介:KubeVela v1.0 启用了新的官网架构和文档维护方式,新增功能包括文档版本化控制.i18n 国际化以及自动化流程.但目前 KubeVela 官方文档只有英文版,这提高了学习和使用 Kub ...
- ElasticSearch搜索语法进阶学习(搜索+聚合,过滤+聚合)
ElasticSearch聚合+搜索语法学习 目录 搜索+聚合:统计指定品牌下每个颜色的销量 global bucket:单个品牌与所有品牌销量对比 过滤+聚合:统计价格大于1200的电视平均价格 b ...
- 屏蔽【CSDN站内搜索聚合】,百度搜索结果过滤【CSDN已经为您找到】
解决的问题:屏蔽[CSDN站内搜索聚合] 1.下载浏览器插件-油猴(Tempermonkey) Download Tampermonkey - free - latest version tamper ...
- Jess 7.2p2——Java平台规则引擎官方文档翻译1
Jess 7.2p2--Java平台规则引擎官方文档翻译1 本博客转载自本体小本营. 1.入门 1.1.需求 在使用Jess前请先确认JVM是否正确安装并能正常工作. 使用JessDE集成开发环境,你 ...
最新文章
- 红帽收购混合云管理提供商NooBaa,混合云爆发节点临近!
- java设计模式---装饰器模式
- [html] 如何关闭HTML页面在IOS下的键盘首字母自动大写?
- 把网卡指定给vm虚拟机_为VMWare虚拟网卡指定静态的MAC地址
- LeetCode 1878. 矩阵中最大的三个菱形和(模拟)
- 如何获取函数的变长参数(va_list, va_start, va_arg, va_end)
- mybaties中通用mapper的基本使用
- 概率论与数理统计思维导图_“我更强调统计学的思维”——专访北京师范大学未来教育学院李勇教授...
- gc cr block lost
- 【教程】在线生成LaTeX中的表格
- Perl笔记:07、以正则表达式进行匹…
- oracle 抽样_利用ORACLE实现数据抽样(sample block)
- 记录一次Anaconda安装Spyder失败及解决方法
- SYN 洪水攻击如何工作?
- C/C++ Qt StatusBar 底部状态栏应用
- Python-列表切片list[-1]、list[-1:]、list[:-1]、list[::1]、list[::-1]的区别
- c++多态之 运行时多态与编译时多态
- 【BLE】CC2541之动态广播加密数据
- caffe基础-07Reshape层的配置
- codeforces24D(高斯消元)