96SEO 2026-02-23 12:25 41
的作用1.1.2.ELK技术栈1.1.3.Elasticsearch

Lucene1.1.4.为什么不是其他搜索技术1.1.5.总结
1.2.倒排索引1.2.1.正向索引1.2.2.倒排索引1.2.3.正向和倒排
的一些概念1.3.1.文档和字段1.3.2.索引和映射1.3.3.MySQL
CRUD2.2.1.创建索引库和映射2.2.2.查询索引库2.2.3.修改索引库2.2.4.删除索引库2.2.5.总结
3.文档操作3.1.新增文档3.2.查询文档3.3.删除文档3.4.修改文档3.4.1.全量修改3.4.2.增量修改
工程4.1.1.导入数据4.1.2.导入项目4.1.3.mapping
操作文档5.1.新增文档5.1.1.索引库实体类5.1.2.语法说明5.1.3.完整代码
5.3.删除文档5.4.修改文档5.4.1.语法说明5.4.2.完整代码
是一款非常强大的开源搜索引擎具备非常多强大功能可以帮助我们从海量数据中快速找到需要的内容。
例如
年研发。
官网地址https://lucene.apache.org/
一个开源的分布式搜索引擎可以用来实现搜索、日志统计、分析、系统监控等功能
Beats、Logstash、Kibana、Elasticsearch
逐行扫描也就是全表扫描随着数据量增加其查询效率也会越来越低。
当数据量达到数百万时就是一场灾难。
文档Document用来搜索的数据其中的每一条数据就是一个文档。
例如一个网页、一个商品信息。
词条Term对文档数据或用户搜索数据利用某种算法分词得到的具备含义的词语就是词条。
例如我是中国人就可以分为我、是、中国人、中国、国人这样的几个词条。
将每一个文档的数据利用算法分词得到一个个词条创建表每行数据包括词条、词条所在文档
虽然要先查询倒排索引再查询倒排索引但是无论是词条、还是文档id都建立了索引查询速度非常快无需全表扫描。
索引的方式。
但根据词条查询时必须先逐条获取每个文档然后判断文档中是否包含所需要的词条是根据文档找词条的过程。
而倒排索引则相反是先找到用户要搜索的词条根据词条得到保护词条的文档的
(Document)**存储的可以是数据库中的一条商品数据一个订单信息。
文档数据会被序列化为
所有用户文档就可以组织在一起称为用户的索引所有商品的文档可以组织在一起称为商品的索引所有订单的文档可以组织在一起称为订单的索引
数据库的表会有约束信息用来定义表的结构、字段的名称、类型等信息。
因此索引库中就有映射
(mapping)是索引中文档的字段约束信息类似表的结构约束。
MySQLElasticsearch说明TableIndex索引
(Column)SchemaMappingMapping映射是索引中文档的约束例如字段类型约束。
类似数据库的表结构
MySQL擅长事务类型操作可以确保数据的安全和一致性Elasticsearch擅长海量数据的搜索、分析、计算
Elasticsearch因此可以先参考https://www.bilibili.com/video/BV1Zn4y1X7AZ?p6这一视频教程来安装
es-data:/usr/share/elasticsearch/data
es-plugins:/usr/share/elasticsearch/plugins
cluster.namees-docker-cluster设置集群名称-e
discovery.typesingle-node非集群模式-v
es-data:/usr/share/elasticsearch/data挂载逻辑卷绑定es的数据-v
es-plugins:/usr/share/elasticsearch/plugins挂载逻辑卷绑定es的插件目录--privileged授予逻辑卷访问权--network
在浏览器中输入http://192.168.101.65:9200即
ELASTICSEARCH_HOSTShttp://es:9200
ELASTICSEARCH_HOSTShttp://es:9200设置
此时在浏览器输入地址访问http://192.168.101.65:5601即可看到结果
https://github.com/medcl/elasticsearch-analysis-ik。
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip#退出
2022-05-06T10:06:3408:00,Driver:
/var/lib/docker/volumes/es-plugins/_data,Name:
/var/lib/docker/volumes/es-plugins/_data
随着互联网的发展“造词运动”也越发的频繁。
出现了很多新的词语在原有的词汇列表中并不存在。
比如“奥力给”“传智播客”
http://java.sun.com/dtd/properties.dtd
扩展配置/comment!--用户可以在这里配置自己的扩展字典
ik_smart智能切分粗粒度ik_max_word最细切分细粒度
字符串text可分词的文本、keyword精确值例如品牌、国家、IP
地址数值long、integer、short、byte、double、float、布尔boolean日期date对象object
trueanalyzer使用哪种分词器properties该字段的子字段
false无需分词器score虽然是数组但是我们只看元素的类型类型为
为true无需分词器name.lastName类型为字符串但是不需要分词因此是
请求方式PUT请求路径/索引库名可以自定义请求参数mapping
1倒排索引结构虽然不复杂但是一旦数据结构改变比如改变了分词器就需要重新创建倒排索引这简直是灾难。
因此索引库一旦创建无法修改
Elasticsearch。
官方文档地址https://www.elastic.co/docs。
其中的
字段名字段数据类型是否参与搜索是否需要分词如果分词分词器是什么
字段名、字段数据类型可以参考数据表结构的名称和类型是否参与搜索要分析业务来判断例如图片地址就无需参与搜索是否分词呢要看内容内容如果是一个整体就无需分词反之则要分词分词器我们可以统一使用
location地理坐标里面包含精度、纬度all一个组合字段其目的是将多字段的值利用
dependencygroupIdorg.elasticsearch.client/groupIdartifactIdelasticsearch-rest-high-level-client/artifactIdversion7.12.1/version
propertieselasticsearch.version7.12.1/elasticsearch.version
/properties3初始化RestHighLevelClient初始化的代码如下
RestHighLevelClient(RestClient.builder(HttpHost.create(http://192.168.150.101:9200)
org.elasticsearch.client.RestHighLevelClient;
org.elasticsearch.client.RestClient;
org.junit.jupiter.api.AfterEach;
org.junit.jupiter.api.BeforeEach;
org.junit.jupiter.api.Test;import
RestHighLevelClient(RestClient.builder(HttpHost.create(http://192.168.101.65:9200)));}AfterEachvoid
org.elasticsearch.client.RestHighLevelClient3fb6cf604.2.创建索引库
MAPPING_TEMPLATE让代码看起来更加优雅。
3发送请求client.indices()
cn.itcast.hotel.constants;public
1.创建Request对象CreateIndexRequest
2.准备请求的参数DSL语句request.source(MAPPING_TEMPLATE,
3.发送请求client.indices().create(request,
1.创建Request对象DeleteIndexRequest
2.发送请求client.indices().delete(request,
client.indices().exists(request,
RestHighLevelClient#indices().xxx()
RestHighLevelClient我们的酒店数据在数据库需要利用
cn.itcast.hotel.service.IHotelService;
org.junit.jupiter.api.AfterEach;
org.junit.jupiter.api.BeforeEach;
org.springframework.beans.factory.annotation.Autowired;
org.springframework.boot.test.context.SpringBootTest;import
RestHighLevelClient(RestClient.builder(HttpHost.create(http://192.168.150.101:9200)));}AfterEachvoid
location。
因此我们需要定义一个新的类型与索引库结构吻合
hotel.getStarName();this.business
hotel.getBusiness();this.location
hotelService.getById(61083L);//
IndexRequest(hotel).id(hotelDoc.getId().toString());//
response.getSourceAsString();HotelDoc
HotelDoc.class);System.out.println(hotelDoc);
pichttps://m.tuniucdn.com/fb3/s1/2n9c/312e971Rnj9qFyR3pPv4bTtpj1hX_w200_h200_c1_t0.jpg)5.3.删除文档
对象这次是修改所以是UpdateRequest2准备参数也就是
2.准备请求参数即要更新的字段request.doc(price,
RequestOptions.DEFAULT);}需要注意的是由于此处并未考虑数据库的同步因此此时数据库中的对应的数据并未发生变化。
IndexRequest也就是新增UpdateRequest也就是修改DeleteRequest也就是删除
2.2.创建新增文档的Request对象request.add(new
IndexRequest(hotel).id(hotelDoc.getId().toString()).source(JSON.toJSONString(hotelDoc),
Index、Get、Update、Delete、Bulk准备参数Index、Update、Bulk
index、get、update、delete、bulk解析结果Get
作为专业的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