ElasticSearch 7.x 入门与实战

这篇具有很好参考价值的文章主要介绍了ElasticSearch 7.x 入门与实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

为了让项目的性能更好,检索的效率更高,考虑引入elasticsearch中间件。

我们的服务器环境为centos7,综合版本考虑,springboot的插件与服务器中都装7.x版本的

比较新,也比较多特性支持。


ElasticSearch简介

ElasticSearch是一个开源的分布式搜索引擎,它使用Lucene作为底层引擎,提供了分布式多租户全文搜索、实时数据分析和可视化等功能。其主要优势包括:

  1. 高性能:ElasticSearch采用分布式架构,可以快速处理大量数据,支持实时搜索和分析。 
  2. 可扩展性:ElasticSearch支持水平扩展,可以通过添加新的节点来扩展集群,实现高可用和负载均衡。 
  3. 灵活性:ElasticSearch提供了丰富的API接口,可以方便地进行数据索引、搜索和分析等操作,同时也支持自定义插件和扩展。 
  4. 易用性:ElasticSearch提供了友好的Web界面和命令行工具,可以方便地进行管理和监控。 

底层实现原理主要包括:

  1. 分片存储:ElasticSearch将数据分成多个片段进行存储和索引,每个片段可以独立管理和查询,提高了搜索效率和可扩展性。 
  2. 倒排索引:ElasticSearch使用Lucene的倒排索引技术,将文档中的每个词都建立一个索引表,可以快速定位包含该词的文档。 
  3. 分布式搜索:ElasticSearch采用分布式搜索技术,将查询请求发送到所有节点进行处理,然后将结果合并返回给客户端。 

ElasticSearch可以用在很多地方,包括:

  1. 搜索引擎:ElasticSearch可以作为企业内部搜索引擎或者网站搜索引擎,提供高效的全文搜索功能。 
  2. 数据分析:ElasticSearch可以用于实时数据分析和可视化,支持聚合、过滤和排序等操作。 
  3. 日志管理:ElasticSearch可以用于日志管理和监控,支持实时索引和搜索。 
  4. 地理空间搜索:ElasticSearch支持地理空间搜索,可以用于位置数据的搜索和分析。

 Elasticsearch底层有什么重要的模块?每个模块的职责或者其底层的实现是怎么样的?你能用中文或者英文进行较为完善的解答吗?

这个问题是笔者在蚂蚁一面时被问道的问题,这里进行一个复盘。

Elasticsearch底层架构主要包括以下几个模块³:

  • 索引模块:负责索引的创建、删除、更新等操作。
  • 搜索模块:负责搜索请求的处理,包括查询解析、查询优化、分布式查询等。
  • 存储模块:负责数据的存储和检索,包括文档的增删改查、数据的压缩和解压缩等。
  • 分析模块:负责对文本进行分词、过滤、归一化等操作,以便于后续的搜索和聚合。
  • 映射模块:负责定义文档的结构和属性,包括字段类型、分词器、过滤器等。

每个模块的职责如下:

  • 索引模块:负责管理索引,包括创建、删除、更新索引等操作。索引是Elasticsearch中最基本的数据单元,它由多个分片组成,每个分片可以在不同的节点上存储。索引模块还负责管理分片的分配和迁移。
  • 搜索模块:负责处理搜索请求,包括查询解析、查询优化、分布式查询等。查询解析将用户输入的查询语句转换为内部查询结构,查询优化会对查询进行优化以提高搜索效率,分布式查询会将查询请求发送到所有节点进行处理,并将结果合并返回给客户端。
  • 存储模块:负责数据的存储和检索,包括文档的增删改查、数据的压缩和解压缩等。Elasticsearch使用倒排索引来实现数据的快速检索,每个分片都有自己的倒排索引。存储模块还负责管理文档的版本控制和冲突检测。
  • 分析模块:负责对文本进行分词、过滤、归一化等操作,以便于后续的搜索和聚合。Elasticsearch提供了多种内置的分词器和过滤器,同时也支持自定义分词器和过滤器。
  • 映射模块:负责定义文档的结构和属性,包括字段类型、分词器、过滤器等。映射是一个JSON对象,它描述了文档中每个字段的类型和属性。映射还可以定义字段别名、动态映射等。

(1) Elasticsearch 底层数据结构 - TechLee - 博客园. https://www.cnblogs.com/tech-lee/p/15225276.html 访问时间 2023/4/11.
(2) 分布式搜索引擎Elasticsearch的架构分析 - 知乎. https://zhuanlan.zhihu.com/p/334348919 访问时间 2023/4/11.
(3) 一篇搞懂ElasticSearch(附学习脑图) - 掘金. https://juejin.cn/post/7009593798011387917 访问时间 2023/4/11.
(4) 28.Elasticsearch的底层模块深入解析之gateway - CSDN博客. https://blog.csdn.net/lm324114/article/details/104836686 访问时间 2023/4/11.
(5) elasticsearch的底层模块深入解析_少林码僧的博客-CSDN博客. https://blog.csdn.net/yonggeit/article/details/102553358 访问时间 2023/4/11.


ElasticSearch和Lucence的区别是什么?

这个问题是笔者在蚂蚁一面时被问道的问题,这里进行一个复盘。

先看New Bing的回答:

Lucene is a Java-based open-source search library that provides full-text search capabilities to applications. Elasticsearch, on the other hand, is a distributed, RESTful search and analytics engine that is built on top of Lucene. Elasticsearch provides a distributed, multitenant-capable full-text search engine with an HTTP web interface and schema-free JSON documents.

Lucene is a library that provides indexing and searching capabilities to applications. It is a low-level library that provides an API for indexing and searching documents. Elasticsearch, on the other hand, is a high-level search engine that provides a RESTful API for indexing and searching documents.

Lucene is used in many applications that require full-text search capabilities, such as web search engines, document management systems, and e-commerce websites. Elasticsearch is used in many applications that require real-time search and analytics capabilities, such as log analysis, security analytics, and business intelligence.

Lucene's main advantage is its speed and efficiency in indexing and searching large volumes of data. Elasticsearch's main advantage is its scalability and distributed architecture, which allows it to handle large volumes of data across multiple nodes.

Lucene's main disadvantage is that it requires developers to write code to use it. Elasticsearch's main disadvantage is that it can be complex to set up and configure.

In summary, Lucene provides low-level indexing and searching capabilities to applications while Elasticsearch provides high-level search and analytics capabilities with a RESTful API for indexing and searching documents.

(1) What is the difference between Lucene and Elasticsearch. https://stackoverflow.com/questions/27793721/what-is-the-difference-between-lucene-and-elasticsearch 访问时间 2023/4/11.
(2) Elasticsearch vs Lucene | What are the differences? - StackShare. https://stackshare.io/stackups/elasticsearch-vs-lucene 访问时间 2023/4/11.
(3) Elasticsearch和Lucene的关系 - moonsoft - 博客园. https://www.cnblogs.com/moonsoft/p/12532301.html 访问时间 2023/4/11.

 翻译之后:

概览:

Lucene 是一个基于 Java 的开源搜索库,可为应用程序提供全文搜索功能。 另一方面,Elasticsearch 是一个构建在 Lucene 之上的分布式 RESTful 搜索和分析引擎。 Elasticsearch 提供了一个分布式的、支持多租户的全文搜索引擎,带有 HTTP Web 界面和无模式的 JSON 文档。

功能:

Lucene 是一个为应用程序提供索引和搜索功能的库。 它是一个低级库,提供用于索引和搜索文档的 API。

Elasticsearch 是一个高级搜索引擎,它提供用于索引和搜索文档的 RESTful API。

应用场景:

Lucene 用于许多需要全文搜索功能的应用程序,例如网络搜索引擎、文档管理系统和电子商务网站。

Elasticsearch 用于许多需要实时搜索和分析功能的应用程序,例如日志分析、安全分析和商业智能。

优势:

Lucene 的主要优势在于它在索引和搜索大量数据方面的速度和效率。

Elasticsearch 的主要优势在于其可扩展性和分布式架构,这使其能够跨多个节点处理大量数据。

劣势:

Lucene 的主要缺点是它需要开发人员编写代码才能使用它。 Elasticsearch 的主要缺点是它的设置和配置可能很复杂。

总之,Lucene 为应用程序提供低级索引和搜索功能,而 Elasticsearch 则通过 RESTful API 为索引和搜索文档提供高级搜索和分析功能。


简要说明es工作流程

  1. 安装elasticsearch:首先需要在本地或服务器上安装elasticsearch。可以从官网下载适合操作系统的安装包,安装完成后启动elasticsearch。

  2. 创建索引:在elasticsearch中,数据存储在索引中。因此,我们需要先创建索引。可以使用命令行或elasticsearch的REST API来创建索引。以下是使用REST API创建索引的示例:

PUT /article
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  }
}

        在上述示例中,我们创建了名为“article”的索引,并设置了一个分片和零个副本。

        3. 添加文档:在elasticsearch中,文档是最小的单位。我们可以使用REST API将文档添加到索引中。以下是一个添加文档的示例:

POST /article/_doc
{
  "title": "My Document",
  "content": "This is my first document in Elasticsearch"
}

        4. 查询数据:可以使用elasticsearch的REST API来查询数据。以下是一个简单的查询示例:

GET /article/_search
{
  "query": {
    "match": {
      "title": "document"
    }
  }
}

        在上述示例中,我们查询了包含“document”这个词的文档。elasticsearch将返回匹配的文档列表。我们则根据这个列表进行再包装即可。


Elastic安装

centos7下的安装,首先选择安装环境,为了方便部署与调试,部署在linux服务器会是一个很好的选择,本地程序只需要远程通信即可访问服务。

1. 首先安装Java环境

我这里本地是jdk1.8,服务器也安装相同的jdk方便调试。

sudo yum install java-1.8.0-openjdk-devel

安装完毕后我们验证一下Java版本

java -version

 输出的结果为:

//output
openjdk version "1.8.0_362"
OpenJDK Runtime Environment (build 1.8.0_362-b08)
OpenJDK 64-Bit Server VM (build 25.362-b08, mixed mode)

2. 把ElasticSearch7 的包加入Centos 7的系统中

cat <<EOF | sudo tee /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/oss-7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

如果要安装6代的话,就更改上文中的数字即可。

执行

sudo yum clean all
sudo yum makecache

3. 安装es7的package

sudo yum -y install elasticsearch-oss

验证安装结果(引用)

rpm -qi elasticsearch-oss
Name        : elasticsearch-oss
Epoch       : 0
Version     : 7.10.2
Release     : 1
Architecture: x86_64
Install Date: Tue 18 Oct 2022 07:10:22 PM UTC
Group       : Application/Internet
Size        : 420252496
License     : ASL 2.0
Signature   : RSA/SHA512, Wed 13 Jan 2021 03:45:21 AM UTC, Key ID d27d666cd88e42b4
Source RPM  : elasticsearch-oss-7.10.2-1-src.rpm
Build Date  : Wed 13 Jan 2021 12:54:36 AM UTC
Build Host  : packer-virtualbox-iso-1600176624
Relocations : /usr
Packager    : Elasticsearch
Vendor      : Elasticsearch
URL         : https://www.elastic.co/
Summary     : Distributed RESTful search engine built for the cloud
...

 4. 修改配置,不同的运行环境支持的内存,以及安全策略是不同的,我们需要根据自己的需要进行调整与改动。

我的电脑下,es安装在

/etc/elasticsearch

 和jvm虚拟机相关的配置,我们需要改动的是

"jvm.options"

我们需要设置最小最大的堆空间。

ElasticSearch 7.x 入门与实战

然后要允许该服务在服务器上运行,执行:

sudo systemctl enable --now elasticsearch

观察运行结果:

● elasticsearch.service - Elasticsearch
   Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2023-04-05 10:39:32 CST; 22h ago
     Docs: https://www.elastic.co
 Main PID: 2339 (java)
   CGroup: /system.slice/elasticsearch.service
           └─2339 /usr/share/elasticsearch/jdk/bin/java -Xshare:auto -Des.networkaddress.cache.ttl=60 -Des.networ...

Apr 05 10:39:16 hecs-37159-firstserver systemd[1]: Stopped Elasticsearch.
Apr 05 10:39:16 hecs-37159-firstserver systemd[1]: Starting Elasticsearch...
Apr 05 10:39:32 hecs-37159-firstserver systemd[1]: Started Elasticsearch.

我们可以实际检测服务是否运行ok:

# curl http://127.0.0.1:9200
{
  "name" : "hecs-37159-firstserver",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "vjIT0H-3Tuut3xBc3O4rhw",
  "version" : {
    "number" : "7.10.2",
    "build_flavor" : "oss",
    "build_type" : "rpm",
    "build_hash" : "747e1cc71def077253878a59143c1f785afa92b9",
    "build_date" : "2021-01-13T00:42:12.435326Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

至此,elasticsearch服务器已经配置完毕。

有的同学可能会遇到访问http://your_ip:9200 无法访问的情况,我们一个是需要开放本机的防火墙,配置云服务器的安全组,以及elasticsearch.yml文件。

1. 开放本机防火墙

sudo firewall-cmd --add-port=5601/tcp --permanent
sudo firewall-cmd --reload

2. 配置安全组,大家可以按自己云服务器的相关手册

3. 配置elasticsearch.yml

我们需要在其中不仅要添加

network.host: 0.0.0.0

还需要添加

cluster.initial_master_nodes: node-1

至此,服务器端安装完毕,如果需要可视化界面,则可以继续安装Kibana插件,大家有兴趣的话可以自行了解。


 面试过程中,知道其底层使通过倒排索引来实现的快速查询。其可以构建多个node,也可以指定shards来进行分片,提高搜索效率与可扩展性。

我们要做的就是建立索引,确定合适的mappings,明确关键字的type使keyword(大小写敏感),还是text。为不同字段确定分词器ngrem还是ik分词器(支持中文)等。

我们重点查询过程中query的模式使match还是item。

我们用的模糊查询使用wildcard还是fuzzy还是正则表达式,抑或是prefix匹配,query string等,可以根据实际性能和查询的内容来实际测试并决定。(毕竟有的支持运算符,但是我们也要实际满足我们的要求)

我们这边决定用于文章的标题,text的形式模糊查询。如果要结合文章的短描述,可以结合multiquerybuilder来构建查询语句,实现对多个字段的查询,以加快查询速度。


仍在更新中...

已完成:

2023.04.06 安装;

2023.04.11 es的底层模块划分

2023.04.11 es和lucence的区别是什么

未完成:

索引与mapping介绍;

CRUD;

搜索;

分词器;

聚合查询;

结合SpringBoot进行说明;


参考资料:

How To Install ElasticSearch 7.x on CentOS 7 / RHEL 7 | ComputingForGeeks

Network.host: 0.0.0.0 is not working in elasticsearch 7.3.0 - Elastic Stack / Elasticsearch - Discuss the Elastic Stack

medcl/elasticsearch-analysis-ik: The IK Analysis plugin integrates Lucene IK analyzer into elasticsearch, support customized dictionary. (github.com)文章来源地址https://www.toymoban.com/news/detail-410034.html

到了这里,关于ElasticSearch 7.x 入门与实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 进行性能压力测试的原因、目的和好处

    性能压力测试是指在模拟高负载、高并发情况下对软件系统进行测试,以衡量系统在实际使用过程中的性能表现。这些测试可以为生产环境中的应用程序提供关键数据,并帮助开发人员从根本上了解系统的实际性能。在本文中,我们将探讨进行性能压力测试的原因、目的和好

    2024年02月10日
    浏览(79)
  • ElasticSearch 7.X系列之: 检索性能优化实战指南

    检索响应慢! 并发检索用户多时,响应时间不达标 卡死了! 怎么还没有出结果? 怎么这么慢? 为啥竞品产品的很快就返回结果了? 宕机了 等等...... 这些都与可能检索有关,确切的说和检索性能有关。 检索性能的优化涉及知识点比较零散,我以官方文档的检索性能优化部

    2023年04月08日
    浏览(51)
  • ElasticSearch学习之ElasticSearch快速入门实战

    1.先“分词” 2.倒排索引(前提是分词) ElasticSearch官网地址: 欢迎来到 Elastic — Elasticsearch 和 Kibana 的开发者 | Elastic https://www.elastic.co/cn/ 下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch 我在本地下载的是7.17.3版本  解压: 启动es之前别忘了配置环境变量:ES_JA

    2024年02月14日
    浏览(34)
  • ElasticSearch入门介绍和实战

    目录 1.ElasticSearch简介 1.1 ElasticSearch(简称ES) 1.2 ElasticSearch与Lucene的关系 1.3 哪些公司在使用Elasticsearch 1.4 ES vs Solr比较 1.4.1 ES vs Solr 检索速度 2.  Lucene全文检索框架 2.1  什么是全文检索 2.2 分词原理之倒排索引 3.  Elasticsearch中的核心概念 3.1  索引 index 3.2  映射 mapping 3.3  字

    2024年02月03日
    浏览(31)
  • ElasticSearch快速入门实战

    1.简介 创始人是Shay Banon(谢巴农),它是java开发,是凯源的企业级搜索引擎,能够实现实时搜索,特点是稳定、可靠、快速,并且安装使用方便。(内置JDK,不需要再安装JDK了) 客户端支持Java、.NET(C#)、PHP、Python、Ruby等主流语言。 目前使用es的公司 :京东等商城app,今日

    2023年04月09日
    浏览(48)
  • elasticsearch学习入门+实战

    学习链接1 官网学习:地址 PS:使用Apifox测试 查询所有索引库 添加索引库 添加时,加入分词器 添加时,加入记录属性值 查询获取索引库 删除索引库 添加文档 必须要在添加文档值的时候用【_doc】,否则值是添加不进去的 6. 带条件的搜索[query方式的搜索] 采用json查询, a.

    2024年02月16日
    浏览(36)
  • 【idea性能篇】性能稳定、更好用的idea

    工欲善其事,必先利其器。idea作为Java程序员们工作中,打交道最多的软件,如果有过大量微服务项目同时开启开发的经验的程序员,想必会对idea是又爱又恨,过高的内存占用,运行时间长后idea响应迟钝,甚至无响应,简直令人抓狂。下面我们来让我们的idea变得更加好用吧

    2024年02月08日
    浏览(43)
  • ElasticSearch 7.x 入门与实战

    为了让项目的性能更好,检索的效率更高,考虑引入elasticsearch中间件。 我们的服务器环境为centos7,综合版本考虑,springboot的插件与服务器中都装7.x版本的 比较新,也比较多特性支持。 ElasticSearch是一个开源的分布式搜索引擎,它使用Lucene作为底层引擎,提供了分布式多租户

    2023年04月11日
    浏览(28)
  • docker安装canal入门实战,同步mysql数据到elasticsearch

    官方docker安装说明文档:https://github.com/alibaba/canal/wiki/Docker-QuickStart canal.adapter canal 1.1.1版本之后, 增加客户端数据落地的适配及启动功能, 目前支持功能: 客户端启动器 同步管理REST接口 日志适配器, 作为DEMO 关系型数据库的数据同步(表对表同步), ETL功能 HBase的数据同步(表对表

    2024年02月04日
    浏览(47)
  • golang中如何配置 sql.DB 以获得更好的性能

    有很多很好的教程讨论 Go 的sql.DB类型以及如何使用它来执行 SQL 数据库查询和语句。但它们中的大多数都掩盖了SetMaxOpenConns()、SetMaxIdleConns()和SetConnMaxLifetime()方法——您可以使用它们来配置 的行为sql.DB并改变其性能。 在这篇文章中,我想准确解释这些设置的作用,并展示它

    2024年02月06日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包