96SEO 2026-02-20 04:16 3
elasticsearch结合kibana、Logstash、Beats#xff0c;也就是elastic

stack(ELK)。
被广泛应用在日志数据分析、实时监控等领域…初识elasticsearch
elasticsearch是一款非常强大的开源搜索引擎可以帮助我们从海量数据中快速找到需要的内容。
elasticsearch结合kibana、Logstash、Beats也就是elastic
stack(ELK)。
被广泛应用在日志数据分析、实时监控等领域。
Lucene是一个Java语言的搜索引擎类库是Apache公司的顶级项目由DougCutting于1999年研发。
官网地址:
Banon重写了Compass取名为Elasticsearch。
https://www.elastic.co/cn/目前最新的版本是:8.7.0
Elasticsearch:开源的分布式搜索引擎Splunk:商业项目Solr:
是以elasticsearch为核心的技术栈包括beats、Logstash、kibana、elasticsearch
传统数据库如MySQL采用正向索引例如给下表(tb_goods中的id创建索引:
对文档内容分词对词条创建索引并记录词条所在文档的信息。
查询时先根据词条查询到文档id而后获取到文档
elasticsearch是面向文档存储的可以是数据库中的一条商品数据一个订单信息。
文档数据会被序列化为json格式后存储在elasticsearch中。
文档:一条数据就是一个文档es中是Json格式字段:Json文档中的字段索引:同类型文档的集合映射:索引中文档的约束比如字段名称、类型
数据库负责事务类型操作elasticsearch负责海量数据的搜索、分析、计算
因为我们还需要部署kibana容器因此需要让es和kibana容器互联。
这里先创建一个网络
这里我们采用elasticsearch的7.12.1版本的镜像这个镜像体积非常大接近1G。
不建议大家自己pull。
将镜像上传到虚拟机中然后运行命令加载即可
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
kibana可以给我们提供一个elasticsearch的可视化界面便于我们学习。
ELASTICSEARCH_HOSTShttp://es:9200
加入一个名为es-net的网络中与elasticsearch在同一个网络中-e
ELASTICSEARCH_HOSTShttp://es:9200设置elasticsearch的地址因为kibana已经与elasticsearch在一个网络因此可以用容器名直接访问elasticsearch-p
此时在浏览器输入地址访问http://ip地址:5601即可看到结果
这个界面中可以编写DSL来操作elasticsearch。
并且对DSL语句有自动补全功能。
es在创建倒排索引时需要对文档分词;在搜索时需要对用户输入内容分词。
但默认的分词规则对中文处理并不友好。
我们在kibana的DevTools中测试:
POST:请求方式/_analyze:请求路径这里省略了http://192.168.150.101:9200有kibana帮我们补充请求参数json风格:
analyzer:分词器类型这里是默认的standard分词器text:要分词的内容
处理中文分词一般会使用IK分词器。
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#退出
安装插件需要知道elasticsearch的plugins通过下面命令查看:
2023-04-29T04:11:4908:00,Driver:
/var/lib/docker/volumes/es-plugins/_data,Name:
也就是/var/lib/docker/volumes/es-plugins/_data
要拓展ik分词器的词库只需要修改一个ik分词器中的IKAnalyzer.cfg.xml文件:
http://java.sun.com/dtd/properties.dtd
扩展配置/comment!--用户可以在这里配置自己的扩展字典
/properties然后在名为ext.dic的文件中添加想要拓展的词语即可:
要禁用某些敏感词条只需要修改一个ik分词器中的IKAnalyzer.cfg.xml文件:
http://java.sun.com/dtd/properties.dtd
扩展配置/comment!--用户可以在这里配置自己的扩展字典
keyext_dictext.dic/entry!--用户可以在这里配置自己的扩展停止词字典--entry
keyext_stopwordsstopword./entry
/properties然后在名为stopword.dic的文件中添加想要拓展的词语即可:
mapping是对索引库中文档的约束常见的mapping属性包括:
(可分词的文本)、keyword精确值例如:品牌、国家、ip地址)数值:long、integer、short、byte、double、float布尔:
index:是否创建索引默认为trueanalyzer:使用哪种分词器properties:该字段的子字段
ES中通过Restful请求操作索引库、文档。
请求内容用DSL语句来表示。
创建索引库和mapping的DSL语法如下:
索引库和mapping一旦创建无法修改但是可以添加新的字段语法如下:
ES官方提供了各种不同语言的客户端用来操作ES。
这些客户端的本质就是组装DSL语句通过http请求发送给ES。
https://www.elastic.co/guide/en/elasticsearch/client/index.html
利用JavaRestClient实现创建、删除索引库判断索引库是否存在
根据课前资料提供的酒店数据创建索引库索引库名为hotelmapping属性根据数据库结构定义。
字段名、数据类型、是否参与搜索、是否分词、如果分词分词器是什么?
longitude确定的一个点。
例如:“32.8752345,120.2981576”geo_shape:有多个geo_point组成的复杂几何图形。
例如一条直线
字段拷贝可以使用copy_to属性将当前字段拷贝到指定字段。
示例:
dependencygroupIdorg.elasticsearch.client/groupIdartifactIdelasticsearch-rest-high-level-client/artifactIdversion7.12.1/version
/dependency因为SpringBoot默认的ES版本是7.6.2所以我们需要覆盖默认的ES版本:
propertiesjava.version1.8/java.versionelasticsearch.version7.12.1/elasticsearch.version
/properties初始化RestHighLevelClient:
org.elasticsearch.client.RestClient;
org.elasticsearch.client.RestHighLevelClient;
org.junit.jupiter.api.AfterEach;
org.junit.jupiter.api.BeforeEach;
org.junit.jupiter.api.Test;import
{System.out.println(client);}BeforeEachvoid
RestHighLevelClient(RestClient.builder(HttpHost.create(http://192.168.5.131:9200)));}AfterEachvoid
cn.itcast.hotel.constants;public
{//1.创建Request对象CreateIndexRequest
CreateIndexRequest(hotel);//2.准备请求的参数:DSL语句request.source(MAPPING_TEMPLATE,
XContentType.JSON);//3.发送请求client.indices().create(request,
{//1.创建Request对象DeleteIndexRequest
DeleteIndexRequest(hotel);//2.发送请求client.indices().delete(request,
{//1.创建Request对象GetIndexRequest
GetIndexRequest(hotel);//2.发送请求boolean
client.indices().exists(request,
RequestOptions.DEFAULT);//3.输出System.err.println(exists?索引库已经存在
去数据库查询酒店数据导入到hotel索引库实现酒店数据的CRUD。
基本步骤如下:
新建一个测试类实现文档相关操作并且完成JavaRestClient的初始化
RestHighLevelClient(RestClient.builder(HttpHost.create(http://192.168.5.131:9200)));}AfterEachvoid
hotelService.getById(61083L);//转换为文档类型HotelDoc
HotelDoc(hotel);//1.准备Request对象IndexRequest
IndexRequest(hotel).id(hotel.getId().toString());//2.准备Json文档request.source(JSON.toJSONString(hotelDoc),
XContentType.JSON);//3.发送请求client.index(request,
根据id查询到的文档数据是json需要反序列化为java对象:
RequestOptions.DEFAULT);//3.解析结果String
response.getSourceAsString();HotelDoc
HotelDoc.class);System.out.println(hotelDoc);
方式一:全量更新。
再次写入id一样的文档就会删除旧文档添加新文档(同新增)
利用mybatis-plus查询酒店数据将查询到的酒店数据(Hotel)转换为文档类型数据HotelDoc)利用JavaRestClient中的Bulk批处理实现批量新增文档
HotelDoc(hotel);//创建新增文档的Request对象request.add(new
IndexRequest(hotel).id(hotelDoc.getId().toString()).source(JSON.toJSONString(hotelDoc),
案例2利用JavaRestClient**批量导入**酒店数据到ES需求:批量查询酒店数据然后批量导入索引库中
将查询到的酒店数据(Hotel)转换为文档类型数据HotelDoc)
利用JavaRestClient中的Bulk批处理实现批量新增文档java
HotelDoc(hotel);//创建新增文档的Request对象request.add(new
IndexRequest(hotel).id(hotelDoc.getId().toString()).source(JSON.toJSONString(hotelDoc),
作为专业的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