为了让项目的性能更好,检索的效率更高,考虑引入elasticsearch中间件。
我们的服务器环境为centos7,综合版本考虑,springboot的插件与服务器中都装7.x版本的
比较新,也比较多特性支持。
ElasticSearch是一个开源的分布式搜索引擎,它使用Lucene作为底层引擎,提供了分布式多租户全文搜索、实时数据分析和可视化等功能。其主要优势包括:
其底层实现原理主要包括:
ElasticSearch可以用在很多地方,包括:
这个问题是笔者在蚂蚁一面时被问道的问题,这里进行一个复盘。
Elasticsearch底层架构主要包括以下几个模块³:
每个模块的职责如下:
(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.
这个问题是笔者在蚂蚁一面时被问道的问题,这里进行一个复盘。
先看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 为索引和搜索文档提供高级搜索和分析功能。
安装elasticsearch:首先需要在本地或服务器上安装elasticsearch。可以从官网下载适合操作系统的安装包,安装完成后启动elasticsearch。
创建索引:在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"
我们需要设置最小最大的堆空间。

然后要允许该服务在服务器上运行,执行:
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
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
@作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors 1、什么是behaviors 2、behaviors的工作方式 3、创建behavior 4、导入并使用behavior 5、behavior中所有可用的节点 6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors 1、什么是behaviorsbehaviors是小程序中,用于实现
遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
不知何故,我似乎无法获得包含我的聚合的响应...使用curl它按预期工作:HBZUMB01$curl-XPOST"http://localhost:9200/contents/_search"-d'{"size":0,"aggs":{"sport_count":{"value_count":{"field":"dwid"}}}}'我收到回复:{"took":4,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":90,"max_score":0.0,"hits":[]},"a
文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定
1.回顾.TransportServicepublicclassTransportServiceextendsAbstractLifecycleComponentTransportService:方法:1publicfinalTextendsTransportResponse>voidsendRequest(finalTransport.Connectionconnection,finalStringaction,finalTransportRequestrequest,finalTransportRequestOptionsoptions,TransportResponseHandlerT>
TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是
文章目录一、项目场景二、基本模块原理与调试方法分析——信源部分:三、信号处理部分和显示部分:四、基本的通信链路搭建:四、特殊模块:interpretedMATLABfunction:五、总结和坑点提醒一、项目场景 最近一个任务是使用simulink搭建一个MIMO串扰消除的链路,并用实际收到的数据进行测试,在搭建的过程中也遇到了不少的问题(当然这比vivado里面的debug好不知道多少倍)。准备趁着这个机会,先以一个很基本的通信链路对simulink基础和相关的debug方法进行总结。 在本篇中,主要记录simulink的基本原理和基本的SISO通信传输链路(QPSK方式),计划在下篇记
我有一个Rails应用程序,现在设置了ElasticSearch和Tiregem以在模型上进行搜索,我想知道我应该如何设置我的应用程序以对模型中的某些索引进行模糊字符串匹配。我将我的模型设置为索引标题、描述等内容,但我想对其中一些进行模糊字符串匹配,但我不确定在何处进行此操作。如果您想发表评论,我将在下面包含我的代码!谢谢!在Controller中:defsearch@resource=Resource.search(params[:q],:page=>(params[:page]||1),:per_page=>15,load:true)end在模型中:classResource'Us