东营做网站优化多少钱外贸拓客软件

当前位置: 首页 > news >正文

东营做网站优化多少钱,外贸拓客软件,店铺设计软件,优秀的定制网站建设提供商文章目录 一、ELK简介1.1 ELK的作用与应用1.2 ELK的组成1.3 Elasticsearch1.4 Logstash1.5 Kibana1.6 ELK架构简述1.7 基础知识1.7.1 数据格式1.7.2 正排索引和倒排索引1.7.3 全文搜索 二、ES入门—基于HTTP的使用方式#xff08;了解#xff09;2.1 索引操作2.1.1 创建索引… 文章目录 一、ELK简介1.1 ELK的作用与应用1.2 ELK的组成1.3 Elasticsearch1.4 Logstash1.5 Kibana1.6 ELK架构简述1.7 基础知识1.7.1 数据格式1.7.2 正排索引和倒排索引1.7.3 全文搜索 二、ES入门—基于HTTP的使用方式了解2.1 索引操作2.1.1 创建索引2.1.2 查询索引2.1.3 删除索引2.1.4 索引映射关系 2.2 文档操作2.2.1 创建文档2.2.2 查询文档2.2.3 更新文档2.2.4 删除文档 三、ES入门—基于Java API的使用方式了解3.1 环境准备3.2 一般流程3.3 索引操作3.3.1 创建索引3.3.2 查询索引3.3.3 删除索引3.3.4 索引映射关系 3.4 文档操作3.4.1 创建文档3.4.2 查询文档3.4.3 更新文档3.4.4 删除文档 四、Kibana的使用重要4.1首页菜单列表说明4.2 Discover详讲4.2.1 菜单/功能选项4.2.2 通过日志进行故障排查的思路4.2.3 待补充内容 参考链接 一、ELK简介 1.1 ELK的作用与应用 作用ELK 是一个用于数据收集、分析和展示的开源技术栈。 应用日志分析、应用程序监控、运营智能、安全审计等多种场景其中日志分析最具有代表性。 1.2 ELK的组成 ELK包含ElasticsearchLogstash和Kibana三个核心组件ELK即这三个核心组件的首字母这些核心组件的详细介绍见后文。 1.3 Elasticsearch Elasticsearch基于Apache Lucene构建是一个全文搜索和分析引擎通常简称ES主要特点如下 它采用了分布式架构支持水平扩展能够收集和存储大量数据并提供近乎实时地、高效地搜索和分析功能。通过RESTful API方式进行交互使用起来简单十分方便。功能强大提供了高级查询与分析功能如复杂查询和聚合操作。 1.4 Logstash Logstash是一款开源的数据收集和处理引擎常常作为连接数据源和数据存储/分析系统的数据管道从不同源头接收数据输入经过一系列处理过滤后再将处理后的数据传输到对应的目的地输出。这一过程是实时发生的适合处理大量且高速流动的数据流。 输入可以从文件系统、消息队列、数据库、网络协议等接收数据。 过滤在数据在传输过程中使用过滤插件对数据进行处理让原始数据变得结构化且易于分析。 输出处理后的数据可以被发送到多个目的地常见的输出包括Elasticsearch、文件系统、消息队列、数据库等。 1.5 Kibana 是ELK中的一个开源的数据分析与可视化平台使用 Kibana 对 Elasticsearch 索引中的数据进行搜索、查看、交互操作并利用图表、表格及地图对数据进行多元化的分析和呈现。 1.6 ELK架构简述 在多个设备上使用Logstash来收集并处理数据然后将数据统一汇总到Elasticsearch。 为避免Elasticsearch过载可以将Logstash处理完的数据先汇总到Redis或MQ上再异步地汇总到Elasticsearch。 用户通过Kibana来使用ELKKibana提供了功能界面和结果展示具体的搜索和分析功能实际是通过调用Elasticsearch完成的。
1.7 基础知识 1.7.1 数据格式 ES是面向文档型数据库数据存储有三层维度从大到小分别是索引、文档、字段。 数据库由多个索引组成每个索引中存放了许多文档每个文档中包含许多字段。 需要注意的是这里的文档并不是指文件而是由多个字段组成的数据字段由字段名和字段值组成类似于键值对此时文档可以类比为一个json数据。 1.7.2 正排索引和倒排索引 正排索引和倒排索引都是信息检索系统中常用的索引结构主要用于提高数据查询的效率在文本搜索领域有着广泛的应用。 正排索引记录了从文档唯一标识符到关键字的映射用于已知文档求关键字的场景。 倒排索引记录了从关键字到文档唯一标识符的映射用于已知关键字求文档的场景。 1.7.3 全文搜索 是一种在非结构化数据中如文档、网页、数据库记录等查找包含特定关键词或短语的技术。它允许用户在一篇文章、一段文字、一本书籍或整个文档集合中搜索内容。 二、ES入门—基于HTTP的使用方式了解 ES集群间组件的通信端口9300 RESTful API的对应端口9200 2.1 索引操作 向ES服务器发送HTTP请求通过RESTful API完成CRUD操作。 2.1.1 创建索引 通过PUT请求创建索引。 创建名为new_index的索引http://localhost:9200/new_index。 2.1.2 查询索引 通过GET请求查询索引。 查询名为new_index的索引http://localhost:9200/new_index。 查询所有索引http://localhost:9200/_cat/indices?v。 2.1.3 删除索引 通过DELETE请求删除索引。 删除名为new_index的索引http://localhost:9200/new_index。 2.1.4 索引映射关系 ES中可以通过映射关系来设置哪些字段用于索引被索引时是否支持分词操作。 通过PUT请求或GET在new_index索引创建或查询映射关系请求地址都为http://localhost:9200/new_index/_mapping。 在创建映射关系时需要使用请求体来设置具体的映射关系 {properties : {字段1 : {type : text, // type为text表示该字段支持分词为keyword表示不支持分词index : true // index为true表示该字段支持使用索引查询为false则不支持},字段2 : {type : keyword,index : false}} }2.2 文档操作 2.2.1 创建文档 通过POST请求创建文档在请求体中给出文档的字段信息。 在new_index索引中创建_id字段为new_doc的文档http://localhost:9200/new_index/_doc/new_doc。 注意1在索引名后要加上/_doc表示是创建文档操作。 注意2在/_doc之后可以加上指定的id若没有加上则会随机生成一个id。 {title:苹果,category:水果 }2.2.2 查询文档 通过GET请求实现查询文档的操作。 主键查询 在new_index索引中查询_id字段为new_doc的文档http://localhost:9200/new_index/_doc/new_doc。 如果没找到该文档那么响应体的found值为false。如果找到了该文档那么响应体的found值为true文档的字段信息会放入响应体的_source中。 全查询 在new_index索引中查询所有文档http://localhost:9200/new_index/_search。 查询的文档信息列表放在了响应体的hits中。 条件查询 字段过滤、分页、排序 在new_index进行查询http://localhost:9200/new_index/_search。 在请求体中实现条件查询、字段过滤、分页、排序、高亮等操作 使用query关键字给出查询条件例子给出的是使用字段等值匹配的条件查询。使用_source关键字来进行字段过滤指定查询的具体字段。使用from和size关键字来实现分页查询。使用sort关键字来对结果进行排序。 {query : {match : {字段名 : 字段值}},from : 0,size : 2,_source : [字段1, 字段5],sort : {第一个排序字段的字段名 : {order : desc},第二个排序字段的字段名 : {order : asc}} }组合查询和范围查询 使用组合查询时要在query.bool来设置 多个条件需要同时满足时使用must关键字来设置多个条件只需要满足其中一个时使用should关键字来设置其值为一个列表每个列表元素对应一个条件。范围查询时通过过滤来实现的需要使用filter.range关键字来设置其中gt、lt、gte、lte分别表示大于、小于、大于等于和小于等于。g表示greaterl表示lesse表示equal {query : {bool : {must : [{match : {字段1 值1}},{match : {字段2 值2}}],filter : {range : {age : {gt : 5000}}}}} }条件查询的匹配规则 使用match进行匹配时会先对给出的匹配值进行分词如划分为一个个单一的字然后使用这些分词通过倒排索引来查询文档。因此只要文档匹配其中任意一个分词都会被查询出来而不是说必须完全匹配给出的匹配值。如查询手机品牌为“华米”的文档那么手机品牌为华为、小米和红米的文档都会被查询出来尽管手机品牌为华米的文档一个都不存在。 若要求完全匹配那就不能使用match此时要换为match_phrase。 聚合查询 在查询的基础上通过请求体设置聚合操作。 常见的聚合操作有统计数量terms、分组并求均值avg {aggs : { // 表示聚合操作price_group : { // 统计结果的名称名称是自定义的terms : { // 分组并统计数量field : price // 统计或分组字段}}},size : 0 // 默认会在hits中显示完整数据这样可以不用显示 }2.2.3 更新文档 通过PUT请求实现全量修改文档的操作。 对于全量修改请求体中需要包含该文档进行全量修改后的所有字段以及它们的最新数据。 请求的url为http://localhost:9200/index/_doc/xyz。 请求体和新增时的一致。 通过POST请求实现局部修改文档的操作。 对于局部修改请求体中仅需包含该文档中进行局部修改的字段以及它们的最新数据。 请求的url为http://localhost:9200/index/_update/xyz。_update表明是修改_doc表明是新增 请求体也有所变化。 {doc:{需要修改的字段名修改后的值} }2.2.4 删除文档 通过DELETE请求实现删除文档的操作。 主键删除 在index索引中删除_id字段为xyz的文档http://localhost:9200/index/_doc/xyz。 三、ES入门—基于Java API的使用方式了解 3.1 环境准备 略 3.2 一般流程 // 1. 创建ES客户端RestHighLevelClient esClient new RestHighLevelClient(RestClient.builder(new HttpHost(hostname, port, http)));// 2. 完成操作// 2.1 获取对应的请求对象// 2.2 设置请求参数// 2.3 使用客户端调用相应的方法执行操作并得到响应结果// 2.4 查看/处理响应结果…// 3. 关闭ES客户端这里需要处理异常esClient.close();3.3 索引操作 3.3.1 创建索引 …// 1. 创建请求对象CreateIndexRequest req new CreateIndexRequest(index_name);// 2. 创建索引:使用ES客户端调用创建索引的方法获取响应CreateIndexResponse res esClient.indices().create(req, RequestOptions.DEFAULT);// 3. 获取响应状态判断成功还是失败boolean acknowledged res.isAcknowledged();…3.3.2 查询索引 …// 1. 创建请求对象GetIndexRequest req new GetIndexRequest(index_name);// 2. 查询索引:使用ES客户端调用查询索引的方法获取响应GetIndexResponse res esClient.indices().get(req, RequestOptions.DEFAULT);// 3. 从响应中获取索引信息…3.3.3 删除索引 …// 1. 创建请求对象DeleteIndexRequest req new DeleteIndexRequest (index_name);// 2. 删除索引:使用ES客户端调用删除索引的方法获取响应DeleteIndexResponse res esClient.indices().delete(req, RequestOptions.DEFAULT);// 3. 获取响应状态判断成功还是失败boolean acknowledged res.isAcknowledged();…3.3.4 索引映射关系 // 1. 创建请求对象CreateIndexRequest request new CreateIndexRequest(index_name);// 2. 创建XContentBuilder来构建映射XContentBuilder mappingBuilder XContentFactory.jsonBuilder().startObject().startObject(properties).startObject(字段1).field(type, text).endObject().startObject(字段2).field(type, keyword).field(analyzer, ik_max_word) // 使用IK分词器.endObject().endObject().endObject();// 3. 构建请求参数并执行request.mapping(mappingBuilder);CreateIndexResponse createIndexResponse client.indices().create(request, RequestOptions.DEFAULT);3.4 文档操作 3.4.1 创建文档 ** 创建单个文档** …// 1. 创建请求对象IndexRequest req new IndexRequest();// 2. 设置文档的索引和id流式操作req.index(index_name).id(doc_id);// 3. 准备文档数据json字符串// (下例通过ObjectMapper实现对象转json)User user new User();user.setName(小明);user.setGender(男);ObjectMapper mapper new ObjectMapper();String json mapper.writeValueAsString();// 4. 将文档数据放入请求体req.source(json, XContentType.JSON);// 5. 创建文档并返回结果IndexResponse res esClient.index(req, RequestOptions.DEFAULT);…批量创建多个文档 …// 1. 创建请求对象BulkRequest req new BulkRequest();// 2. 创建多个文档数据// 2.1 按单次插入的方式准备IndexRequest对象// 2.2 然后将这些IndexRequest对象添加到BulkRequest对象req.add(indexReq1);req.add(indexReq2);req.add(indexReq3);// 3. 执行批量创建文档的操作BulkResponse res esClient.bulk(req, RequestOptions.DEFAULT);…3.4.2 查询文档 主键查询 …// 1. 创建请求对象GetRequest req new GetRequest();// 2. 设置文档的索引和id流式操作req.index(index_name).id(doc_id);// 3. 查询文档并返回结果GetResponse res esClient.get(req, RequestOptions.DEFAULT);// 4. 获取文档数据// 4.1 Map类型的文档数据res.getSource();// 4.2 json类型的文档数据res.getSourceAsString();…条件查询 字段过滤、分页、排序、高亮 注意1字段过滤分页排序高亮是通过SearchSourceBuilder对象设置的。 注意2查询条件是通过QueryBuilder设置的具体的QueryBuilder对象是通过QueryBuilders回去的。 注意3QueryBuilder对象是作为SearchSourceBuilder对象的query参数使用的而SearchSourceBuilder对象是作为请求体的source参数使用的。 注意4全查询以及其他高级查询主要是使用了特定的QueryBuilder其他部分基本一致。 …// 1. 创建请求对象SearchRequest req new SearchRequest();// 2. 设置文档的索引req.indices(index_name);// 3. 创建SearchSourceBuilder对象SearchSourceBuilder ssBuilder new SearchSourceBuilder();// 4. 字段过滤String[] includes {希望查询的字段}String[] excludes {希望过滤的字段}ssBuilder.fetchSource(includes, excludes);// 5. 分页ssBbuilder.from(0);ssBbuilder.size(2);// 6. 排序ssBbuilder.sort(排序字段, SortOrder.DESC);// 7. 高亮本质是在高亮字段的值前后加上字符串HighlightBuilder hBuilder new HighLlightBuilder();hBuilder.preTags(font colorred);hBuilder.postTags(/font);bBuilder.field(高亮的字段)// 8. 获取条件查询的QueryBuilder对象但条件完全匹配为例TermsQueryBuilder tqBuilder queryBuilders.termsQuery(字段名,匹配值);// 9. 准备请求参数builder.query(tqBuikder);req.source(ssBuilder);// 10. 查询并返回结果SearchResponse res esClient.search(req, RequestOptions.DEFAULT);// 11. 获取结果中的文档SearchHits hits res.getHits();条件查询的匹配规则 使用queryBuilders.termsQuery时是完全匹配。 使用queryBuilders.matchQuery时是分词匹配。 全查询 …MatchQueryBuilder mqBuilder QueryBuilders.matchAllQuery();ssBuilder.query(mqBuilder);…组合查询 多个条件的组合查询通过BoolQueryBuilder实现。 …BoolQueryBuilder bqBuilder new BoolQueryBuilder();bqBuilder.must(queryBuilders.termsQuery(字段名1,匹配值1););bqBuilder.mustNot(queryBuilders.termsQuery(字段名2,匹配值2););bqBuilder.should(queryBuilders.termsQuery(字段名3,匹配值3););ssBuilder.query(bqBuilder);…范围查询 范围查询通过QueryBuilders.rangeQuery()实现。 …// 年龄大于18小于等于60RangeQueryBuilder rqBuilder QueryBuilders.rangeQuery(age);rqBuilder.gt(18);rqBuilder.lte(60);ssBuilder.query(rqBuilder);…模糊查询 模糊查询通过QueryBuilders.fuzzyQuery()实现。 模糊查询时要设置模糊度即允许相差的字符个数通过fuzzyQuery()的参数设置。 …FuzzyQueryBuikder fqBuilder QueryBuilders.fuzzyQuery(字段名, 匹配值).fuzziness(Fuzziness.ONE);ssBuilder.query(fqBuilder);…聚合查询和分组 相较于条件查询相当于将QueryBuilder换成了AggregationBuilder并将SearchSourceBuilder对象调用的方法换成了aggregation。 AggregationBuilder通过AggregationBuilders获取特定的聚合操作用相应的AggregationBuilder即可。聚合查询如max分组查询如terms分组并统计数量。 …AggregationBuilder aBuilder AggregationBuilders.max(统计结果名称).field(统计或分组字段); ssbuilder.aggregation(aBuilder);…3.4.3 更新文档 全量修改 // 1. 创建请求对象UpdateRequest updateRequest new UpdateRequest(indexName, id);// 2. 设置具体的全量修改updateRequest.doc(updatedDocJson, XContentType.JSON); // 提供完整的新文档内容updateRequest.upsert(updatedDocJson, XContentType.JSON); // 如果文档不存在则插入新文档// 3. 更新文档并返回结果UpdateResponse updateResponse esClient.update(updateRequest, RequestOptions.DEFAULT);局部修改 …// 1. 创建请求对象UpdateRequest req new UpdateRequest();// 2. 设置文档的索引和id流式操作req.index(index_name).id(doc_id);// 3. 准备局部修改的数据req.doc(XContentType.JSON, 要修改的字段名, 修改后的值);// 4. 更新文档并返回结果UpdateResponse res esClient.update(req, RequestOptions.DEFAULT);…3.4.4 删除文档 主键删除 …// 1. 创建请求对象DeleteRequest req new DeleteRequest();// 2. 设置文档的索引和id流式操作req.index(index_name).id(doc_id);// 3. 删除文档并返回结果DeleteResponse res esClient.delete(req, RequestOptions.DEFAULT);…批量删除 类似于批量创建多个文档 四、Kibana的使用重要 无论是RESTful API的方式还是Java API的方式使用ES都不太方便。大多数场景我们都可以借助Kibana的可视化界面来完成操作。 4.1首页菜单列表说明 Discover数据探索用于搜索、浏览和交互ES中的数据。Visualize可视化让用户能够将数据转化为各种图表形式。Dashboard仪表盘允许用户将多个可视化组件组合到一个可交互的界面上形成一个综合的数据监控面板。Timelion时序控件专注于时间序列数据的可视化。Canvas画布允许用户通过自由布局、艺术设计和技术功能的结合将ES中的数据转变为富有吸引力和互动性的信息图。Management管理是进行系统和数据源配置的地方让用户能够配置Kibana设置、索引模式(Index Patterns)、空间(Spaces)、 Saved Objects已保存对象等。 4.2 Discover详讲 4.2.1 菜单/功能选项 index-pattern Kibana使用索引模式来组织ES索引通过*来匹配一组具有相似命名模式的索引这组索引在过滤时能用作条件的索引字段是相同的在查询结果中能展示的字段也是相同的。索引模式由运维创建和维护。 过滤器 每次点击过滤器添加按钮可以添加一个过滤条件此时可以选择条件字段、过滤规则并填写相应的过滤条件参数。其中可选的条件字段是索引模式中所设置的使用的匹配模式是完全匹配多个过滤条件之间是且关系。此外filter也支持使用Elasticsearch Query DSL来设置过滤条件。 字段 这里指查询结果中展示的字段。当选定一个索引模式后就会在可选字段部分列出能看到的所有字段从中选择并添加希望展示的字段已选择的字段会在已选字段中展示。若没有选择默认展示所有字段。 补充可选字段前面的前缀#、t、?分别表示number类型、text类型和位置类型的字段其中位置类型的字段不能用于discover查询和visualize可视化。 时间过滤 时间过滤器根据timestamp作为过滤字段提供了多种方便快捷的时间过滤方式。 也可以直接点击时间柱状图的柱子进行时间过滤。 搜索栏 使用搜索栏时要遵循Kinana查询语法可以用但没必要。 进行一些简单的条件筛选时通常使用filter而不必手写查询条件。 进行一些复杂的条件筛选时如聚合查询、多条件查询此时可以使用filter并以Elasticsearch Query DSL方式实现。 工具栏 New允许用户创建新的查询、可视化或仪表板。 Save用于保存当前正在编辑或配置的查询、可视化或仪表板。 Open允许用户打开之前保存的查询、可视化或仪表板。 Share使用户能够分享当前的查询、可视化或仪表板给其他Kibana用户。 Inspect此功能主要用于查看和分析Kibana发送到ES的底层请求详情。 Auto-refresh允许用户设置一个时间间隔在该间隔时间内Kibana会自动重新加载或更新当前页面上的数据视图比如仪表板或可视化。用于监控实时数据流、跟踪最新指标或在故障排查时持续观察系统状态。 4.2.2 通过日志进行故障排查的思路 关注于一些关键字段 requestId单词请求的唯一标识。applicationName应用AppId。message具有可读性的信息。url调用地址。具有标识作用的字段如订单号手机号。 链路追踪 根据关键字寻到requestId根据requestId查询调用链路分析错误依赖的上下游根据remotename判断调用方异步调用时RequestId可能存在没有透传一般通过上下游链路透传的某一参数进行查询 4.2.3 待补充内容 // to do 参考链接 ELK详解一——ELK基本原理 Kibana用户手册