96SEO 2026-02-20 03:30 7
。

它提供了一个分布式多用户能力的全文搜索引擎#xff0c;基于RESTful
web接口。
Elasticsearch是用Java开发的#xff0c;并作为Apache许可条款下的…1
ElasticSearch是一个基于Lucene的搜索服务器。
它提供了一个分布式多用户能力的全文搜索引擎基于RESTful
web接口。
Elasticsearch是用Java开发的并作为Apache许可条款下的开放源码发布是当前流行的企业级搜索引擎。
Elastic官方宣布Elasticsearch进入Version
8最低jdk版本要求jdk17当前我们选择Elasticsearch版本Elasticsearch8.5.3
理论上数据从写入Elasticsearch到数据可以被搜索只需要1秒左右的时间实现准实时的数据索引和查询。
天生的分布式的设计数据分片对于应用层透明扩展性良好可以轻易的进行节点扩容支持上百甚至上千的服务器节点支持PB级别的数据存储和搜索。
Elasticsearch的分布式、数据冗余特性提供更加可靠的运行机制且经过大型互联网公司众多项目使用可靠性得到验证。
API的语言都能够轻易的使用Elasticsearch具备多语言通用的支持特性易于使用。
Elasticsearch
API这将使得Elasticsearch更加容易使用原来被诟病的API混乱问题终于得到完美解决。
Elasticsearch底层构建基于Lucene具备强大的搜索能力即便是PB级别的数据依然能够实现秒级的搜索。
支持Java、Python、Go、PHP、Ruby等多语言客户端还支持JDBC、ODBC等客户端。
提供单点登录SSO、加密通信、集群角色、属性的访问控制支持审计等功能在安全层面上还支持集成第三方的安全组件在Version
日志系统应该是Elasticsearch使用最广泛的场景之一了Elasticsearch支持海量数据的存储和查询特别适合日志搜索场景。
广泛使用的ELK套件(Elasticsearch、Logstash、Kibana)是日志系统最经典的案例使用Logstash和Beats组件进行日志收集Elasticsearch存储和查询应用日志Kibana提供日志的可视化搜索界面。
Elasitcsearch支持数据分析例如强大的数据聚合功能通过搭配Kibana提供诸如直方图、统计分组、范围聚合等方便使用的功能能够快速实现一些数据报表等功能。
在数字化转型的大行其道的当下需要从海量数据中发现数据的规律从而做出一定的决策Elasticsearch一定是最适合的解决方案之一。
Elasticsearch为搜索而生用于搭建全文搜索系统是自然而然的事情它能够提供快速的索引和搜索功能还有相关的评分功能、分词插件等支持丰富的搜索特性可以用于搭建大型的搜索引擎更加常用语实现站内搜索例如银行App、购物App等站内商品、服务搜索。
目前大量的需要支持事务的系统使用MySQL作为数据库但随着业务的开展数据量会越来越大而MySQL的性能会越来越差虽然可以通过分库分表的方案进行解决但是操作比较复杂而且往往每隔一段时间就需要进行扩展且代码需要配合修改。
这种情况下可以将数据从MySQL同步到Elasticsearch针对实时性要求不太高或者主要查询历史数据且数据量比较大的场景使用Elasticsearch提供查询而对需要事务实时控制的即时数据还是通过MySQL存储和查询。
Elasticsearch本身提供了数据持久化存储的能力并且提供了增删改查的功能在某些应用场景下可以直接当做数据库系统来使用既提供了存储能力又能够同时具备搜索能力整体技术架构会比较简单例如博客系统、评论系统。
需要注意的是Elasticsearch不支持事务且写入的性能相对关系型数据库稍弱所有需要使用事务的场景都不能将Elasticsearch当做唯一的数据库系统这使得这种使用场景很少见。
Google百度类的网站搜索它们都是根据网页中的关键字生成索引我们在搜索的时候输入关键字它们会将该关键字即索引匹配到的所有网页返回还有常见的项目中应用日志的搜索等等。
对于这些非结构化的数据文本关系型数据库搜索不是能很好的支持。
一般传统数据库全文检索都实现的很鸡肋因为一般也没人用数据库存文本字段。
进行全文检索需要扫描整个表如果数据量大的话即使对SQL的语法优化也收效甚微。
建立了索引但是维护起来也很麻烦对于
这里说到的全文搜索引擎指的是目前广泛应用的主流搜索引擎。
它的工作原理是计算机索引程序通过扫描文章中的每一个词对每一个词建立一个索引指明该词在文章中出现的次数和位置当用户查询时检索程序就根据事先建立的索引进行查找并将查找的结果反馈给用户的检索方式。
这个过程类似于通过字典中的检索字表查字的过程。
Lucene是Apache软件基金会Jakarta项目组的一个子项目提供了一个简单却强大的应用程式接口能够做全文索引和搜寻。
在Java开发环境里Lucene是一个成熟的免费开源工具。
就其本身而言Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。
但Lucene只是一个提供全文搜索功能类库的核心工具包而真正使用它还需要一个完善的服务框架搭建起来进行应用。
目前市面上流行的搜索引擎软件主流的就两款Elasticsearch和Solr,这两款都是基于Lucene搭建的可以独立部署启动的搜索引擎服务软件。
由于内核相同所以两者除了服务器安装、部署、管理、集群以外对于数据的操作
数据根据词条进行分词同时记录文档索引位置将词条相同的数据化进行合并对词条进行排序
先将搜索词语进行分词分词后再倒排索引列表查询文档位置(docId)。
根据docId查询文档数据。
现在很多互联网应用都是要求实时搜索的所以我们选择了elasticsearch。
一个索引就是一个拥有几分相似特征的文档的集合。
比如说你可以有一个客户数据的索引另一个产品目录的索引还有一个订单数据的索引。
一个索引由一个名字来标识必须全部是小写字母并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时候都要使用到这个名字。
在一个集群中可以定义任意多的索引。
能搜索的数据必须索引这样的好处是可以提高查询速度比如新华字典前面的可以提高查询速度。
Elasticsearch索引的精髓一切设计都是为了提高搜索的性能。
一个类型是你的索引的一个逻辑上的分类/分区其语义完全由你来定。
通常会为具有一组共同字段的文档定义一个类型。
不同的版本类型发生了不同的变化
版本Type5.x支持多种type6.x只能有一种type7.x默认不再支持自定义索引类型默认类型为_doc8.x默认类型为_doc
比如你可以拥有某一个客户的文档某一个产品的一个文档当然也可以拥有某个订单的一个文档。
文档以JSONJavascript
Notation格式来表示而JSON是一个到处存在的互联网数据交互格式。
mapping是处理数据的方式和规则方面做一些限制如某个字段的数据类型、默认值、分析器、是否被索引等等。
这些都是映射里面可以设置的其它就是处理ES里面数据的一些使用规则设置也叫做映射按着最优规则处理数据对性能提高很大因此才需要建立映射并且需要思考如何建立映射才能对性能更好。
参考文档https://www.elastic.co/guide/en/elasticsearch/reference/8.5/elasticsearch-intro.html
Standard、Letter、Lowercase、Whitespace、UAX
Email、Classic、Thai等中文分词器可以使用第三方的比如IK分词器。
前面我们已经安装过了。
data_content}}},number_of_shards:
1693294063006,number_of_replicas:
kYMuXUZQRumMGqHoV0fDJw,version:
不依赖预先定义的模式所以可以将文档类比为表的一行JSON类型的数据。
我们知道关系型数据库中要提前定义字段才能使用在Elasticsearch中对于字段是非常灵活的有时候我们可以忽略该字段或者动态的添加一个新的字段。
http://www.gulixueyuan.com/xm.jpg,price:
http://www.gulixueyuan.com/xm.jpg,price:
http://www.gulixueyuan.com/xm.jpg,price
http://www.gulixueyuan.com/xm.jpg,price:
http://www.gulixueyuan.com/xm.jpg,price:
创建数据库表需要设置字段名称类型长度约束等索引库也一样需要知道这个类型下有哪些字段每个字段有哪些约束信息这就叫做映射(mapping)。
在关系数据库中需要事先创建数据库然后在该数据库下创建数据表并创建
表字段、类型、长度、主键等最后才能基于表插入数据。
而Elasticsearch中不
需要定义Mapping映射即关系型数据库的表、字段等在文档写入
Elasticsearch时会根据文档字段自动识别类型这种机制称之为动态映射。
数据对应的类型null字段不添加true|flaseboolean字符串text数值long小数float日期date
静态映射是在Elasticsearch中也可以事先定义好映射即手动映射包含文档的各字段类型、分词器等这称为静态映射。
keyword(不支持分词)。
text该类型被用来索引长文本在创建索引前会将这些文本进行分词转化为词的组合建立索引允许es来检索这些词text类型不能用来排序和聚合。
keyword该类型不能分词可以被用来检索过滤、排序和聚合keyword类型不可用text进行分词模糊检索。
数值型long、integer、short、byte、double、float日期型date布尔型boolean特殊数据类型nested
nested类型是一种特殊的对象object数据类型(specialised
《狂人日记》是一篇象征性和寓意很强的小说当时鲁迅对中国国民精神的麻木愚昧颇感痛切。
,comments:
}如上所示所以我们有一个文档描述了一个帖子和一个包含帖子上所有评论的内部对象评论。
但是Elasticsearch搜索中的内部对象并不像我们期望的那样工作。
我们可以清楚地看到comments.name和comments.age之间的关系已丢失。
这就是为什么我们的文档匹配李四和34的查询。
类型的comments字段映射为nested类型而不是默认的object类型
《狂人日记》是一篇象征性和寓意很强的小说当时鲁迅对中国国民精神的麻木愚昧颇感痛切。
,comments:
嵌套对象将数组中的每个对象索引为单独的隐藏文档这意味着可以独立于其他对象查询每个嵌套对象。
文档的内部表示
Language(领域专用语言)Elasticsearch提供了基于JSON的DSL来定义查询。
{id:1,title:华为笔记本电脑,category:华为,images:http://www.gulixueyuan.com/xm.jpg,price:5388}PUT
{id:2,title:华为手机,category:华为,images:http://www.gulixueyuan.com/xm.jpg,price:5500}PUT
{id:3,title:VIVO手机,category:vivo,images:http://www.gulixueyuan.com/xm.jpg,price:3600}5.2
http://www.gulixueyuan.com/xm.jpg,price
http://www.gulixueyuan.com/xm.jpg,price
http://www.gulixueyuan.com/xm.jpg,price
http://www.gulixueyuan.com/xm.jpg,price
http://www.gulixueyuan.com/xm.jpg,price
http://www.gulixueyuan.com/xm.jpg,price:
http://www.gulixueyuan.com/xm.jpg,price:
http://www.gulixueyuan.com/xm.jpg,price:
http://www.gulixueyuan.com/xm.jpg,price
http://www.gulixueyuan.com/xm.jpg,price
http://www.gulixueyuan.com/xm.jpg,price:
http://www.gulixueyuan.com/xm.jpg,price
http://www.gulixueyuan.com/xm.jpg,price
http://www.gulixueyuan.com/xm.jpg,price
score。
这个分数用于衡量一个文档与特定查询的匹配程度它是基于搜索查询的条件和文档的内容来计算的。
相关性分数越高表示文档与查询的匹配度越高排名也越靠前。
http://www.gulixueyuan.com/xm.jpg,price
http://www.gulixueyuan.com/xm.jpg,price
聚合允许使用者对es文档进行统计分析类似与关系型数据库中的group
http://www.gulixueyuan.com/xm.jpg,price
http://www.gulixueyuan.com/xm.jpg,price
http://www.gulixueyuan.com/xm.jpg,price
http://www.gulixueyuan.com/xm.jpg,price
http://www.gulixueyuan.com/xm.jpg,price:
color:#e4393c机/font]}},{_index:
http://www.gulixueyuan.com/xm.jpg,price:
color:#e4393c机/font]}},{_index:
http://www.gulixueyuan.com/xm.jpg,price:
官方文档https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/8.5/installation.html
xmlnshttp://maven.apache.org/POM/4.0.0
xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.0.5/versionrelativePath/
--/parentgroupIdcom.atguigu/groupIdartifactIdelasticsearch_demo/artifactIdversion0.0.1-SNAPSHOT/versionpropertiesjava.version17/java.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdco.elastic.clients/groupIdartifactIdelasticsearch-java/artifactIdversion8.5.3/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.12.3/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project6.1.2
com.atguigu.elasticsearch;import
co.elastic.clients.elasticsearch.ElasticsearchClient;
co.elastic.clients.json.jackson.JacksonJsonpMapper;
co.elastic.clients.transport.ElasticsearchTransport;
co.elastic.clients.transport.rest_client.RestClientTransport;
org.apache.http.auth.AuthScope;
org.apache.http.auth.UsernamePasswordCredentials;
org.apache.http.impl.client.BasicCredentialsProvider;
org.apache.http.message.BasicHeader;
org.elasticsearch.client.RestClient;
org.springframework.boot.SpringApplication;
org.springframework.boot.autoconfigure.SpringBootApplication;
org.springframework.context.annotation.Bean;SpringBootApplication
{SpringApplication.run(ElasticsearchDemoApplication.class,
BasicCredentialsProvider();credsProv.setCredentials(AuthScope.ANY,
UsernamePasswordCredentials(elastic,
RestClient.builder(HttpHost.create(http://139.198.127.41:9200)).setHttpClientConfigCallback(hc
hc.setDefaultCredentialsProvider(credsProv)).build();//
RestClientTransport(restClient,
ElasticsearchClient(transport);return
com.atguigu.elasticsearch_demo;import
co.elastic.clients.elasticsearch.ElasticsearchClient;
co.elastic.clients.elasticsearch.core.SearchResponse;
org.springframework.beans.factory.annotation.Autowired;
org.springframework.boot.test.context.SpringBootTest;import
java.io.IOException;SpringBootTest
ElasticsearchDemoApplicationTests
request.index(my_index).query(q
elasticsearchClient.search(searchRequest,
System.out.println(search);SearchResponseObject
{System.out.println(hit.source());}}
imageshttp://www.gulixueyuan.com/xm.jpg,
imageshttp://www.gulixueyuan.com/xm.jpg,
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback