ElasticSearch笔记

简介: Elasticsearch是用Java开发并且是当前最流行的开源的企业级搜索引擎。 能够达到实时搜索,稳定,可靠,快速,安装使用方便。 客户端支持Java、.NET(C#)、PHP、Python、Ruby等多种语言。

ElasticSearch简介

ElasticSearch(简称ES)

Elasticsearch是用Java开发并且是当前最流行的开源的企业级搜索引擎。 能够达到实时搜索,稳定,可靠,快速,安装使用方便。 客户端支持Java、.NET(C#)、PHP、Python、Ruby等多种语言。

官方网站:https://www.elastic.co/
下载地址:https://www.elastic.co/cn/start

ElasticSearch与Lucene的关系

Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库(框 架) 但是想要使用Lucene,必须使用Java来作为开发语言并将其直接集成到你的应用 中,并且Lucene的配置及使用非常复杂,你需要深入了解检索的相关知识来理解 它是如何工作的。

Lucene缺点:

  1. 只能在Java项目中使用,并且要以jar包的方式直接集成项目中。
  2. 使用非常复杂-创建索引和搜索索引代码繁杂。
  3. 不支持集群环境-索引数据不同步(不支持大型项目)。
  4. 索引数据如果太多就不行,索引库和应用所在同一个服务器,共同占用 硬盘.共用空间少。

上述Lucene框架中的缺点,ES全部都能解决。

ES vs Solr比较

ES vs Solr 检索速度

当单纯的对已有数据进行搜索时,Solr更快。
1.png

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

大型互联网公司,实际生产环境测试,将搜索引擎从Solr转到 Elasticsearch以 后的平均查询速度有了50倍的提升。
3.png

总结:

二者安装都很简单。

  1. Solr 利用 Zookeeper 进行分布式管理,而Elasticsearch 自身带有分布式 协调管理功能。
  2. Solr 支持更多格式的数据,比如JSON、XML、CSV,而 Elasticsearch 仅支 持json文件格式。
  3. Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用 时效率明显低于Elasticsearch。
  4. Solr 是传统搜索应用的有力解决方案,但 Elasticsearch更适用于新兴的实 时搜索应用。

ES vs 关系型数据库

4.png

Lucene全文检索框架

什么是全文检索

全文检索是指:
通过一个程序扫描文本中的每一个单词,针对单词建立索引,并保存 该单词在文本中的位置、以及出现的次数.
用户查询时,通过之前建立好的索引来查询,将索引中单词对应的文 本位置、出现的次数返回给用户,因为有了具体文本的位置,所以就可以 将具体内容读取出来了

分词原理之倒排索引

5.png
6.png
7.png


指定IK分词器作为默认分词器

ES的默认分词设置是standard,这个在中文分词时就比较尴尬了,会单字拆分,比如我搜 索关键词“清华大学”,这时候会按“清”,“华”,“大”,“学”去分词,然后搜出来 的都是些“清清的河水”,“中华儿女”,“地大物博”,“学而不思则罔”之类的莫名其 妙的结果,这里我们就想把这个分词方式修改一下,于是呢,就想到了ik分词器,有两种 ik_smart和ik_max_word。 ik_smart会将“清华大学”整个分为一个词,而ik_max_word会将“清华大学”分为“清 华大学”,“清华”和“大学”,按需选其中之一就可以了。 修改默认分词方法(这里修改school_index索引的默认分词为:ik_max_word):
8.png

测试分词效果:

9.png
10.png
11.png

ES数据管理

ES数据管理概述

ES是面向文档(document oriented)的,这意味着它可以存储整个对象或文档 (document)。
然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。 在ES中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。 ES使用JSON作为文档序列化格式。 JSON现在已经被大多语言所支持,而且已经成为NoSQL领域的标准格式。
ES存储的一个员工文档的格式示例:
12.png

基本操作

创建索引

格式: PUT /索引名称
举例: PUT /es_db

查询索引

格式: GET /索引名称
举例: GET /es_db

删除索引

格式: DELETE /索引名称
举例: DELETE /es_db

添加文档

格式: PUT /索引名称/类型/id
举例:
13.png

修改文档

格式: PUT /索引名称/类型/id
举例:
14.png

查询文档

格式: GET /索引名称/类型/id
举例: GET /es_db/_doc/1

删除文档

格式: DELETE /索引名称/类型/id
举例: DELETE /es_db/_doc/1

查询操作

查询当前类型中的所有文档 _search

格式: GET /索引名称/类型/_search
举例: GET /es_db/_doc/_search

SQL: select * from student
条件查询, 如要查询age等于28岁的 _search?q=:**

格式: GET /索引名称/类型/_search?q=:**
举例: GET /es_db/_doc/_search?q=age:28

SQL: select * from student where age = 28
范围查询, 如要查询age在25至26岁之间的 _search?q=[ TO *] 注 意: TO 必须为大写

格式: GET /索引名称/类型/_search?q=*[25 TO 26]
格式: GET /索引名称/类型/_search?q=*[25 TO 26]

SQL: select * from student where age between 25 and 26
根据多个ID进行批量查询 _mget

格式: GET /索引名称/类型/_mget
举例: GET /es_db/_doc/_mget

{ 
"ids":["1","2"]
}
查询年龄小于等于28岁的 :<=

格式: GET /索引名称/类型/_search?q=age:<=**
举例: GET /es_db/_doc/_search?q=age:<=28

SQL: select * from student where age <= 28
查询年龄大于28岁的 :>

格式: GET /索引名称/类型/_search?q=age:>**
举例: GET /es_db/_doc/_search?q=age:>28

SQL: select * from student where age > 28
分页查询 from=&size=

格式: GET /索引名称/类型/_search?q=age[25 TO 26]&from=0&size=1
举例: GET /es_db/_doc/_search?q=age[25 TO 26]&from=0&size=1

SQL: select * from student where age between 25 and 26 limit 0, 1
对查询结果只输出某些字段 _source=字段,字段

格式: GET /索引名称/类型/_search?_source=字段,字段
举例: GET /es_db/_doc/_search?_source=name,age

SQL: select name,age from student
对查询结果排序 sort=字段:desc/asc

格式: GET /索引名称/类型/_search?sort=字段 desc
举例: GET /es_db/_doc/_search?sort=age:desc

SQL: select * from student order by age desc
相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
相关文章
|
安全
【Elasticsearch6】安装笔记
【Elasticsearch6】安装笔记
129 2
|
JSON 安全 搜索推荐
白日梦的Elasticsearch实战笔记,32个查询案例、15个聚合案例、7个查询优化技巧(一)
白日梦的Elasticsearch实战笔记,32个查询案例、15个聚合案例、7个查询优化技巧(一)
1527 1
|
关系型数据库 MySQL 索引
|
自然语言处理 安全 关系型数据库
|
前端开发 Java iOS开发
elasticsearch8.1源码编译笔记
elasticsearch8.1源码编译笔记
267 0
|
Java 数据库 Docker
Elasticsearch笔记
Elasticsearch笔记
285 0
Elasticsearch笔记
|
存储 Web App开发 搜索推荐
Elasticsearch笔记(集群插件、kibana、什么是倒排索引)
Elasticsearch笔记(集群插件、kibana、什么是倒排索引)
Elasticsearch笔记(集群插件、kibana、什么是倒排索引)
Elasticsearch核心技术与实战-极客课程笔记
Elasticsearch核心技术与实战-极客课程笔记
718 0
Elasticsearch核心技术与实战-极客课程笔记
|
搜索推荐
ElasticSearch笔记
ElasticSearch笔记
252 0
ElasticSearch笔记
|
SQL 缓存 自然语言处理
白日梦的Elasticsearch实战笔记,32个查询案例、15个聚合案例、7个查询优化技巧(二)
白日梦的Elasticsearch实战笔记,32个查询案例、15个聚合案例、7个查询优化技巧(二)
1283 1

热门文章

最新文章