Elasticsearch(ES)的用法

Elasticsearch(ES)的用法

目录

1.Elasticsearch概述

1.1 搜索是什么

1.2 数据库做搜索弊端

1.2.1 站内搜索(垂直搜索):数据量小,简单搜索,可以使用数据库。

1.2.2 互联网搜索,肯定不会使用数据库搜索。数据量太大,属于PB级。

1.3 常见的搜索引擎

1.4 Elasticsearch 是什么

1.5 Elasticsearch的使用场景

2. ES的安装

2.1 Elasticsearch安装包

2.2 Windows安装Kibana

3.ES中常见的概念

4.ES常用API接口

4.1 基本的操作

4.1.1 创建一个索引

4.1.2 查询索引的结构

4.1.3 查询有哪些索引

4.1.4 添加文档---记录

4.1.5 查询文档---id查询

4.1.6 删除所有---数据库

4.1.7 删除文档--根据ID

​4.1.8 修改文档

4.2 根据其他条件查询

4.2.1 查询所有的文档

4.2.2 根据条件搜索

4.2.3 查询的条件封装成json数据

4.3 多条件查询

4.3.1 must等价于and

4.3.2 should代表or

4.3.3 关于取反

4.4 高亮显示

1.Elasticsearch概述

1.1 搜索是什么

概念:用户输入想要的关键词,返回含有该关键词的所有信息。

场景:

(1)互联网搜索:谷歌、百度、各种新闻首页

(2)站内搜索(垂直搜索):企业

OA

查询订单、人员、部门,电商网站内

部搜索商品(淘宝、京东)场景。

1.2 数据库做搜索弊端

1.2.1 站内搜索(垂直搜索):数据量小,简单搜索,可以使用数据库。

问题出现:

(1)存储问题。电商网站商品上亿条时,涉及到单表数据过大必须拆分表,

数据库磁盘占用过大必须分库(

mycat

)。

(2) 性能问题:解决上面问题后,查询“

笔记本电脑

”

等关键词时,上亿条数据

的商品名字段逐行扫描,性能跟不上。

(3)不能分词。如搜索“

笔记本电脑

”

,只能搜索完全和关键词一样的数据,那

么数据量小时,搜索

“

笔记电脑

”

,

“

电脑

”

数据要不要给用户。

1.2.2 互联网搜索,肯定不会使用数据库搜索。数据量太大,属于PB级。

我们可以使用搜索引擎来解决数据库搜索的问题

:

搜索也是一款数据库,搜索可以进行分词搜索---搜索速度非常快

1.3 常见的搜索引擎

ElasticSearch与Solr比较

(1)当单纯的对已有数据进行搜索时,Solr更快

(2)当实时建立索引时,Solr会产生io阻塞,查询性能较差,ElasticSearch具有明显的优势。

(3)随着数据量的增加,Solr的搜索效率会变的更低,而ElasticSearch却没有明显的变化。

总结:

1、ES基本是开箱即用(解压就可以用!)非常简单。Solr安装略微复杂一丢丢! 2、Solr 利用Zookeeper进行分布式管理,而Elasticsearch自身带有分布式协调管理功能。 3、Solr 支持更多格式的数据,比如JSON、XML、 CSV ,而Elasticsearch仅支持json文件格式。 4、Solr 官方提供的功能更多,而Elasticsearch本身更注重于核心功能,高级功能多有第三方插件提供,例如图形化界面需要kibana友好支撑。 5、Solr 查询快,但更新索引时慢(即插入删除慢) ,用于电商等查询多的应用; ES建立索引快(即查询慢) ,即实时性查询快,用于facebook新浪等搜索。 6、Solr是传统搜索应用的有力解决方案,但Elasticsearch更适用于新兴的实时搜索应用。 7、Solr比较成熟,有一个更大,更成熟的用户、开发和贡献者社区,而Elasticsearch相对开发维护者较少,更新太快,学习使用成本较高。

1.4 Elasticsearch 是什么

The Elastic Stack, 包括

Elasticsearch

【搜索,分析】、

Kibana

【可视

化】、

Beats

和

Logstash

【数据的搜集】(也称为

ELK Stack

)。能够安

全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、

分析和可视化。

Elaticsearch,简称为

ES

,

ES

是一个

开源的高扩展的分布式全文搜索引

擎

, 是整个

ElasticStack

技术栈的核心。

它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台

服务器,处理

PB

级别的数据。

1.5 Elasticsearch的使用场景

国外: 维基百科,类似百度百科,“网络七层协议”的维基百科,全文检索,高亮,搜索推荐。 Stack Overflow(国外的程序讨论论坛),相当于程序员的贴吧。遇到问题去上面发帖,热心网友下面回帖解答。 GitHub(开源代码管理),搜索上千亿行代码。 电商网站,检索商品。 日志数据分析,logstash采集日志,ES进行复杂的数据分析(ELK技术,elasticsearch+logst- tash+kibana) 商品价格监控网站,用户设定某商品的价格阈值,当低于该阈值的时候,发送通知消息给用户,比如说订阅《java编程思想》的监控,如果价格低于27块钱,就通知我,我就去买。 BI系统,商业智能(Business Intelligence)。大型连锁超市,分析全国网点传回的数据,分析各个商品在什么季节的销售量最好、利润最高。成本管理,店面租金、员工工资、负债等信息进行分析。从而部署下一个阶段的战略目标。

国内: 百度搜索,第一次查询,使用es。

OA、ERP系统站内搜索

ES:搜索的一款数据库,支持的数据格式json

2. ES的安装

安装

JDK

,至少

1.8.0_73

以上版本,验证:

java -version

。

2.1 Elasticsearch安装包

下载和解压缩Elasticsearch

安装包,查看目

录结构。

https://www.elastic.co/cn/downloads/elasticsearch

下载地址:

https://www.elastic.co/cn/downloads/

解压后,进入 bin 文件目录,点击 elasticsearch.bat 文件启动 ES 服务 。

注意: 9300 端口为 Elasticsearch 集群间组件的通信端口, 9200 端口为

浏览器访问的 http协议 RESTful 端口。

打开浏览器,输入地址:

http://localhost:9200

,测试返回结果,返回结果如下:

2.2 Windows安装Kibana

1、kibana是

es

数据的前端展现,数据分析时,可以方便地看到数据。作

为开发人员,可以方便访问

es

。

https://www.elastic.co/cn/downloads/

2、下载,解压

kibana

。

3、启动

Kibana

:

bin\kibana.bat

4、浏览器访问

http://localhost:5601

进入

Dev Tools

界面。像

sql

一样支

持代码提示。

3.ES中常见的概念

Elasticsearch 是

面向文档型数据库

,一条数据在这里就是一个文档。 为

了方便理解,将

Elasticsearch

里存储文档数据和关系型数据库

MySQL

存储数据的概念进行一个类比

ES 里的

Index

可以看做一个库,而

Types

相当于表,

Documents

则相当于表的行。这里

Types

的概念已经被逐渐弱化,

Elasticsearch 6.X

中,一

个

index

下已经只能包含一个

type

,

Elasticsearch 7.X

中

,Type

的概念已

经被删除了。

4.ES常用API接口

4.1 基本的操作

4.1.1 创建一个索引

(1) PUT /索引名称/类型名称/1 { 数据 } 创建索引并往索引中添加一条文档

(2)指定字段的类型(使用PUT)

类似于建库(建立索引和字段对应类型),也可看做规则的建立 PUT /索引名 PUT /wdqy151 { "mappings":{ "properties": { "name":{ "type": "text" }, "age":{ "type": "integer" } } } }

字段数据类型

字符串类型 text、keyword

text:支持分词,全文检索,支持模糊、精确查询,不支持聚合,排序操作;text类型的最大支持的字符长度无限制,适合大字段存储;

keyword:不进行分词,直接索引、支持模糊、支持精确匹配,支持 聚合、排序操作。keyword类型的最大支持的长度为——32766个UTF-8 类型的字符,可以通过设置ignore_above指定自持字符长度,超过给 定长度后的数据将不被索引,无法通过term精确匹配检索返回结果。

text: 它会为该字段的内容进行拆词操作,并放入倒排索引表中

keyword: 它不会进行拆词操作

使用match匹配查询---对匹配的关键字进行拆词操作,并和倒排索引表中对应。

使用term精准匹配---它不会对关键字进行拆词操作,而且把关键字作为一个整体和倒排索引表进行匹配

数值型 long、Integer、short、byte、double、float、half float、scaled float 日期类型 date 布尔类型 boolean 二进制类型 binary 等等......

4.1.2 查询索引的结构

GET /索引名

4.1.3 查询有哪些索引

GET /_cat/indices?v

4.1.4 添加文档---记录

# 必须指定id的值

PUT /wdqy151/test/2 { "name":"疏词", "age":25 }

# 不指定id

POST /wdqy151/test/ { "name":"一帆", "age":25 }

4.1.5 查询文档---id查询

查询的提交方式必须为GET

GET /索引名称/类型名称/id值

4.1.6 删除所有---数据库

DELETE /索引名

4.1.7 删除文档--根据ID

提交方式DELETE提交方式

根据不同的操作具有不同的提交方式restful风格

GET 查询 PUT 修改 POST 添加操作 DELETE 删除操作

4.1.8 修改文档

#修改--这种修改必须要求指定所有列,如果只指定部分列,则原来其他列消失

PUT /wdqy151/test/2 { "name":"小可", "age":18 }

PUT /wdqy151/test/2 { "name":"小孟", }

#部分修改--不会丢失数据

POST /wdqy151/test/2/_update { "doc":{ "age":23 } }

4.2 根据其他条件查询

4.2.1 查询所有的文档

GET /wdqy151/test/_search

4.2.2 根据条件搜索

GET /索引名称/类型名称/_search?q=字段名:值

4.2.3 查询的条件封装成json数据

#根据年龄生成对应数据的json对象

GET /wdqy151/test/_search { "query": { "match": { "age":23 } } }

#指定查询部分列

GET /wdqy151/test/_search { "query": { "match": { "age":23 } } , "_source":["name"] }

#分页查询数据

GET /wdqy151/test/_search

{ "query": { "match": { "age":23 } }, "_source": ["name"], "from": 0, "size":3 }

#年龄大于23的查询出来,使用模糊查询

GET /wdqy151/test/_search { "query": { "range": { "age":{ "gt":23 } } }, "_source":["name","age"], "from":0, "size": 3 }

#按年龄降序排序

GET /wdqy151/test/_search { "query": { "range": { "age": { "gt": 20 } } }, "_source": ["name","age"], "from": 0, "size": 5, "sort": [ { "age": { "order": "desc" } } ] }

4.3 多条件查询

4.3.1 must等价于and

GET /wdqy151/test/_search { "query": { "bool": { "must": [ { "match": { "age": 24 } }, { "match": { "name": "雪" } } ] } } }

4.3.2 should代表or

GET /wdqy151/test/_search { "query": { "bool": { "should": [ { "match": { "age": 28 } }, { "match": { "name": "雪" } } ] } } }

4.3.3 关于取反

GET /wdqy151/test/_search { "query": { "bool": { "must_not": [ { "match": { "age": 28 } } ] } } }

4.4 高亮显示

#查询出来的单字展现为红色

GET /wdqy151/test/_search { "query": { "match": { "name": "雪" } }, "highlight": { "pre_tags": "", "post_tags": "", "fields": { "name":{} } } }

相关推荐

如何利用CF技巧快速刷枪:彻底攻略揭秘
365betapp

如何利用CF技巧快速刷枪:彻底攻略揭秘

📅 08-18 👁️ 6710
应聘技巧:打电话求职怎么说?
bt365账户为什么封

应聘技巧:打电话求职怎么说?

📅 07-17 👁️ 9984
苹果的sos怎么使用
365游戏中心正式版

苹果的sos怎么使用

📅 08-30 👁️ 8142
上海治疗失眠最好的医院排名
365betapp

上海治疗失眠最好的医院排名

📅 07-10 👁️ 6537
武昌鱼又叫什么鱼 武昌鱼是哪里的特产
bt365账户为什么封

武昌鱼又叫什么鱼 武昌鱼是哪里的特产

📅 07-19 👁️ 4502
芒果TV操作全知道:下载视频、设密码、展现活跃状态
365游戏中心正式版

芒果TV操作全知道:下载视频、设密码、展现活跃状态

📅 07-10 👁️ 3159
雾纱藏骨室
365游戏中心正式版

雾纱藏骨室

📅 07-07 👁️ 1533