![](https://img-blog.csdnimg.cn/20200602204156169.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Elasticsearch
【ES从入门到实战】
runewbie
简书:https://www.jianshu.com/u/c2a465162d4c
掘金:https://juejin.im/user/5baa3d536fb9a05d1117871a
展开
-
【ES从入门到实战】完整合集版,带思维导图
文章目录简介一、基本概念1、Index(索引)2、Type(类型)3、Document(文档)4、倒排索引机制二、Docker 安装1、下载镜像文件下载elasticsearch下载kibana2、创建实例1. ElasticSearch2, Kibana三、初步检索1、_cat2、索引一个文档(对应成Mysql就是保存一条记录)3、查询文档3.1、get查询数据3.2、乐观锁修改4、更新文档5、删除文档&索引5.1、删除文档5.2、删除索引6、bulk 批量 API7、样本测试数据四、进阶检索1.原创 2020-06-02 22:59:37 · 1723 阅读 · 3 评论 -
【ES从入门到实战】一、全文检索-ElasticSearch-简介
简介elasticsearch全文搜索属于最常见的需求,开源的 Elasticsearch 是目前全文搜索引擎的首选。它可以快速地存储、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。Elastic 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。REST API:天然的跨平台。官方文档官方中文一、基本概念1、原创 2020-05-22 02:45:48 · 730 阅读 · 1 评论 -
【ES从入门到实战】二、全文检索-ElasticSearch-Docker安装ES
二、Docker 安装1、下载镜像文件下载elasticsearchdocker pull elasticsearch:7.4.2 # 存储和检索数据下载kibanadocker pull kibana:7.4.2 # 可视化检索数据注意:elasticsearch 要和 kibana 的版本保持一致!2、创建实例1. ElasticSearchmkdir -p /mydata/elasticsearch/config # 在mydata文件夹下创建es的config文件夹,将原创 2020-05-22 02:54:39 · 2333 阅读 · 5 评论 -
【ES从入门到实战】三、全文检索-ElasticSearch-Docker安装Kibana
接第二节内容2, Kibana安装可视化界面docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.56.10:9200 -p 5601:5601 \-d kibana:7.4.2注意,一定要将192.168.56.10修改为自己的虚拟机地址安装完成后在浏览器地址栏访问http://192.168.56.10:5601/,可以看到 kibana 已经启动成功:选择yes或no都可以:使用我们自己的数据:.原创 2020-05-22 22:46:09 · 410 阅读 · 1 评论 -
【ES从入门到实战】四、全文检索-ElasticSearch-入门-_cat
三、初步检索对 ES 的所有请求都被封装成了 REST API,因此我们可以使用 postman 来访问它。使用 postman 或者在浏览器地址栏输入请求路径http://192.168.56.10:9200/_cat/xxx1、_catGET /_cat/nodes:查看所有节点GET /_cat/health:查看es健康状况GET /_cat/master:查看主节点GET /_cat/indices:查看所有索引 ;相当于 MySQL 的 sho原创 2020-05-23 18:01:10 · 510 阅读 · 1 评论 -
【ES从入门到实战】五、全文检索-ElasticSearch-入门-put&post新增数据
接第4节2、索引一个文档(对应成Mysql就是保存一条记录)保存一个数据,保存在哪个索引的哪个类型下,指定用哪个唯一标识PUT customer/external/1;在 customer 索引下的 external 类型下保存 1 号数据为PUT customer/external/1{ “name”:“lohn Doe”}PUT 和 POST 都可以;POST 新增。如果不指定id,会自动生成 id。指定 id 就会修改这个数据,并新增版本号;PUT 可以新增也可以修.原创 2020-05-23 18:55:29 · 5453 阅读 · 2 评论 -
【ES从入门到实战】六、全文检索-ElasticSearch-入门-get查询数据&乐观锁字段
接第5节3、查询文档3.1、get查询数据GET customer/external/1结果:{ “_index”: “customer”, //在哪个索引 “_type”: “external”, //在哪个类型 “_id”: “1”, //记录id “_version”: 4, //版本号 “_seq_no”: 5, //并发控制字段,每次更新就会+1,用来做乐观锁 “_primary_term”: 1, //同上,主分片重.原创 2020-05-24 10:14:30 · 693 阅读 · 1 评论 -
【ES从入门到实战】七、全文检索-ElasticSearch-入门-put&post修改数据
接第6节4、更新文档更新操作参数或结论POST customer/external/1/_update{ “doc”: { “name”: “Jane Doe”, “age”: 20 }}或者POST customer/external/1{“name”: “John Nash2”}或者PUT customer/external/1{“name”: “John Nash3”}不同POST 操作会对比源文.原创 2020-05-24 11:14:33 · 1817 阅读 · 3 评论 -
【ES从入门到实战】八、全文检索-ElasticSearch-入门-删除数据&bulk批量操作导入样本测试数据
接第7节5、删除文档&索引删除类型方法或路径参数删除文档DELETE customer/external/1删除索引DELETE customer5.1、删除文档在 postman 中使用 delete 方法发送 http://192.168.56.10:9200/customer/external/1 请求,可以看到以下结果,可以看到删除文档成功:再发送一次请求,会返回一个 404 状态的 not_found 结果:查询一下刚才删除的文档,会返.原创 2020-05-24 15:34:15 · 972 阅读 · 1 评论 -
【ES从入门到实战】九、全文检索-ElasticSearch-进阶-两种查询方式
接第8节四、进阶检索1、SearchAPlES 支持两种基本方式检索:一个是通过使用 REST request URI 发送搜索参数(uri+检索参数)另一个是通过使用 REST requestbody 来发送它们(uri+请求体)1)、检索信息一切检索从_search开始uri+检索参数:请求或返回解释GET bank/_search检索 bank 下所有信息,包括 type 和 docsGET bank/_search?q=*&sort=ac.原创 2020-05-24 16:28:22 · 937 阅读 · 1 评论 -
【ES从入门到实战】十、全文检索-ElasticSearch-进阶-QueryDSL基本使用&match_all
接第9节2、Query DSL在上一节中使用的形如GET /bank/_search{ "query": { "match_all": {} }, "sort": [ { "account_number": "asc" }, { "balance": "desc" } ]}的查询语言风格,我们称之为 Query DSL。1)、基本语法格式Elastisearch 提供了一个可以执行查询的 Json 风格.原创 2020-05-25 20:43:10 · 1239 阅读 · 1 评论 -
【ES从入门到实战】十一、全文检索-ElasticSearch-进阶-match全文检索
接第10节3)、match【匹配查询】基本类型(非字符串),精确匹配match 返回 account_number=20 的数据:GET /bank/_search{ "query": { "match": { "account_number": 20 } }}字符串,全文检索全文检索按照评分进行排序,会对检索条件进行分词匹配GET /bank/_search{ "query": { "match": { "ad.原创 2020-05-25 21:26:22 · 564 阅读 · 1 评论 -
【ES从入门到实战】十二、全文检索-ElasticSearch-进阶-match_phrase短语匹配
接11节4)、match_phrase 【短语匹配】将需要匹配的值当成一个整体单词(不分词)进行检索举个栗子:查出 address 中包含 mill road 的所有记录,并给出相关性得分GET /bank/_search{ "query": { "match_phrase": { "address": "mill road" } }}参考文档-query-dsl参考:Elasticsearch Referenceelastic全文搜索.原创 2020-05-25 22:07:50 · 413 阅读 · 1 评论 -
【ES从入门到实战】十三、全文检索-ElasticSearch-进阶-multi_match多字段匹配
接12节5)、multi_match 【多字段匹配】举例:state 或 address 包含 millGET /bank/_search{ "query": { "multi_match": { "query": "mill", "fields": ["address","state"] } }}多字段查询的时候也会进行分词查询,得分最高的在前面:GET /bank/_search{ "query": { "multi_m.原创 2020-05-25 22:25:46 · 1028 阅读 · 1 评论 -
【ES从入门到实战】十四、全文检索-ElasticSearch-进阶-bool复合查询
接第13节6)、bool 【复合查询】bool 用来做复合查询:复合语句可以合并任何其它查询语句,包括复合语句,了解这一点是很重要的。这就意味着,复合语句之间可以互相嵌套,可以表达非常复杂的逻辑。must:必须达到 must 列举的所有条件GET /bank/_search{ "query": { "bool": { "must": [ { "match": { "gender": "F" .原创 2020-05-26 00:45:44 · 430 阅读 · 1 评论 -
【ES从入门到实战】十五、全文检索-ElasticSearch-进阶-filter过滤
接第14节6)、filter 【结果过滤】并不是所有的查询都需要产生分数,特别是那些仅用于 “fitering” (过滤)的文档。为了不计算分数 Elasticsearch 会自动检查场景并且优化查询的执行。在 filter 元素下指定的查询对得分没有影响-得分以 0 形式返回。分数仅受指定查询的影响。以 must 查询为例:GET /bank/_search{ "query": { "bool": { "must": [ {"range": { .原创 2020-05-26 21:34:12 · 534 阅读 · 1 评论 -
【ES从入门到实战】十六、全文检索-ElasticSearch-进阶-term查询
接第15节7)、term和 match 一样。匹配某个属性的值。全文检索字段用 match,其他非 text 字段匹配用 term。Avoid using the term query for text fields.By default, Elasticsearch changes the values of text fields as part of analysis. This can make finding exact matches for text field values d.原创 2020-05-26 22:04:58 · 390 阅读 · 1 评论 -
【ES从入门到实战】十七、全文检索-ElasticSearch-进阶-aggregations聚合分析
接第16节9) 、aggregations (执行聚合)聚合提供了从数据中分组和提取数据的能力。最简单的聚合方法大致等于 SQL GROUP BY 和 SQL 聚合函数。在 Elasticsearch 中,您有执行搜索返回 hits (命中结果),并且同时返回聚合结果,把一个响应中的所有hits(命中结果)分隔开的能力。这是非常强大且有效的,您可以执行查询和多个聚合,并且在一次使用中得到各自的(任何一个的)返回结果,使用一次简洁和简化的 API 来避免网络往返。aggregations 查.原创 2020-05-27 00:49:59 · 591 阅读 · 1 评论 -
【ES从入门到实战】十八、全文检索-ElasticSearch-映射-mapping创建
接第17节3、Mapping1)、字段类型核心类型字符串(string)text,keyword数字类型(Numeric)long, integer, short, byte, double, float, half_float, scaled_float日期类型(Date)date布尔类型(Boolean)boolean二进制类型(Binary)binary复合类型数组类型(Array)Array 支持不针对特定的数据类型对象类型(Object)obj.原创 2020-05-28 20:56:50 · 476 阅读 · 1 评论 -
【ES从入门到实战】十九、全文检索-ElasticSearch-映射-添加新的字段映射
接第18节3)、新版本改变ES7 及以上移除了 type 的概念。关系型数据库中两个数据表示是独立的,即使他们里面有相同名称的列也不影响使用,但ES中不是这样的。 elasticsearch 是基于 Lucene 开发的搜索引擎,而 ES 中不同 type 下名称相同的 filed 最终在 Lucene 中的处理方式是一样的。两个不同 type 下的两个 user_name,在 ES 同一个索引下其实被认为是同一个 filed,你必须在两个不同的 type 中定义相同的 filed 映射。否.原创 2020-05-28 21:37:18 · 1309 阅读 · 1 评论 -
【ES从入门到实战】二十、全文检索-ElasticSearch-映射-修改映射&数据迁移
接第19节4、数据迁移先创建出 twitter 的正确映射。然后使用如下方式进行数据迁移# 7.x 之后的写法POST _reindex //固定写法{ "source": { //老索引 "index": "twitter" }, "dest": { //目标索引 "index": "new_twitter" }}# 7.x之前的带 type 的写法将旧索引的 type 下的数据进行迁移POST _reindex //固定写法{ "sourc.原创 2020-05-28 22:12:39 · 480 阅读 · 1 评论 -
【ES从入门到实战】二十一、全文检索-ElasticSearch-分词-分词&安装ik分词
接第20节4、分词一个 tokenizer (分词器)接收一个字符流,将之分割为独立的 tokens (词元,通常是独立的单词),然后输出 tokens流。例如, whitespace tokenizer 遇到空白字符时分割文本。它会将文本"Quick brown fox!"分割为[Quick, brown, fox!l。该 tokenizer (分词器)还负责记录各个 term (词条)的顺序或 position位置(用于 phrase短语和 word proximity 词近邻查询) ,以及.原创 2020-05-29 21:55:26 · 815 阅读 · 1 评论 -
【ES从入门到实战】二十二、补充 - Vagrant 创建虚拟机 - 修改 linux 网络设置 & 开启 root 密码访问
文章目录一、修改 linux 网络设置`1、进入网卡设置目录下``2、查看当系统前网卡信息``3、修改网卡地址,添加网关和 DNS 服务``4、配置新的 yum 源,提升软件安装下载速度`二、开启 root 密码访问`1、修改 sshd_config 文件``2、重启服务`一、修改 linux 网络设置1、进入网卡设置目录下cd sysconfig/network-scripts/2、查看当系统前网卡信息ip addr3、修改网卡地址,添加网关和 DNS 服务vi ifcfg-eth1原创 2020-05-31 00:50:03 · 697 阅读 · 1 评论 -
【ES从入门到实战】二十三、全文检索-ElasticSearch-分词-自定义扩展词库
3)、自定义词库ik 分词器默认的分词并不能满足我们的需求,对于一些新的网络用语,ik 分词器就会无法准确的进行分词识别,比如:POST _analyze{ "analyzer": "ik_max_word", "text": "乔碧萝殿下"}分词之后显示为如下,可以看到 ik 分词器无法识别出“乔碧萝”是一个人名:所以,需要进行自定义拓展词库。要自定义拓展词库,可以修改 ik 分词器的配置文件,指定一个远程词库,让 ik 分词器向远程发送请求,要到一些最新的单词,这样最新的单词就原创 2020-05-31 21:46:41 · 975 阅读 · 4 评论 -
【ES从入门到实战】二十四、全文检索-ElasticSearch-整合-SpringBoot整合high-level-client
接第23节五、Elasticsearch-Rest-ClientJava 操作 ES 的两种方式:1) 、9300:TCP (我们不在9300操作,官方也不建议)spring-data-elasticsearch:transport-api.jar;springboot 版本不同,transport-api.jar不同,不能适配es版本7.x 已经不建议使用,8 以后就要废弃2)、9200:HTTP(推荐使用)JestClient:非官方,更新慢RestTemplate:模.原创 2020-06-01 19:48:10 · 932 阅读 · 1 评论 -
【ES从入门到实战】二十五、全文检索-ElasticSearch-整合-SpringBoot整合high-level-client
接第24节2、配置1)、配置在 PafcmallElasticsearchConfig 配置类中添加如下配置: public static final RequestOptions COMMON_OPTIONS; static { RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder(); // 这里先注释掉,目前没有用到,后边用到了再解释// builder.addH.原创 2020-06-01 19:53:55 · 324 阅读 · 1 评论 -
【ES从入门到实战】二十六、全文检索-ElasticSearch-整合-测试复杂检索
接第25节3、使用在上一小节中实现了创建索引,这一小节来试一下数据的检索功能。在代码中实现 搜索address中包含mill的所有人的年龄分布以及平均薪资 这个功能,如果是在 kibana 中,使用的是下面的DSL语句:GET /bank/_search{ "query": { //查询 "match": { "address": "mill" } }, "aggs": { //聚合 "ageAgg": { //年龄分布 "terms.原创 2020-06-01 22:09:09 · 588 阅读 · 1 评论 -
【ES从入门到实战】附录-安装nginx
六、附录-安装nginx1、重装 ES在安装 nginx 之前,需要重新安装一下 ES ,因为之前安装的 ES 的最大内存设置的是128M,在使用会出现各种问题,现在改成512M的,最快速的方式是删除原来的容器,然后重新创建一个。那么之前的 ES 的数据会丢失吗?答案是不会。因为之前我在安装 ES 的时候进行了文件目录的映射,所有的数据文件都存在虚拟机之上,而不是 docker 容器之中。docker run --name elasticsearch -p 9200:9200 -p 9300:930原创 2020-05-31 21:57:12 · 489 阅读 · 0 评论