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

做花型设计哪个网站下载素材好便宜网站建设公司

做花型设计哪个网站下载素材好,便宜网站建设公司,centos一键wordpress,厦门今天刚刚发生的新闻第十一章 分布式搜索引擎 elasticsearch 一、初识 elasticsearch 1. 了解 ES 1.1 elasticsearch 的作用 elasticsearch 是一款非常强大的开源搜索引擎#xff0c;具备非常多强大功能#xff0c;可以帮助我们从海量数据中快速找到需要的内容 例如#xff1a; 在 GitHub 搜…第十一章 分布式搜索引擎 elasticsearch 一、初识 elasticsearch 1. 了解 ES 1.1 elasticsearch 的作用 elasticsearch 是一款非常强大的开源搜索引擎具备非常多强大功能可以帮助我们从海量数据中快速找到需要的内容 例如 在 GitHub 搜索代码 在电商网站搜索商品 在谷歌搜索答案 在打车软件搜索附近的车 1.2 ELK 技术栈 elasticsearch 结合 kibana、Logstash、Beats也就是 elastic stackELK。被广泛应用在日志数据分析、实时监控等领域 而 elasticsearch 是 elastic stack 的核心负责存储、搜索、分析数据。 1.3 elasticsearch 和 lucene elasticsearch 底层是基于lucene来实现的。 Lucene是一个 Java 语言的搜索引擎类库是 Apache 公司的顶级项目由 DougCutting 于 1999 年研发。官网地址https://lucene.apache.org/ 。 elasticsearch的发展历史 2004 年 Shay Banon 基于 Lucene 开发了 Compass2010 年 Shay Banon 重写了 Compass取名为 Elasticsearch。 1.4 为什么不是其他搜索技术 目前比较知名的搜索引擎技术排名 虽然在早期Apache Solr 是最主要的搜索引擎技术但随着发展 elasticsearch 已经渐渐超越了 Solr独占鳌头。 1.5 总结 什么是 elasticsearch 一个开源的分布式搜索引擎可以用来实现搜索、日志统计、分析、系统监控等功能 什么是 elastic stackELK 是以 elasticsearch 为核心的技术栈包括 beats、Logstash、kibana、elasticsearch 什么是 Lucene 是 Apache 的开源搜索引擎类库提供了搜索引擎的核心 API 2. 倒排索引 倒排索引的概念是基于 MySQL 这样的正向索引而言的。 2.1 正向索引 那么什么是正向索引呢例如给下表tb_goods中的 id 创建索引 如果是根据 id 查询那么直接走索引查询速度非常快。 但如果是基于 title 做模糊查询只能是逐行扫描数据流程如下 1用户搜索数据条件是 title 符合%手机% 2逐行获取数据比如 id 为 1 的数据 3判断数据中的 title 是否符合用户搜索条件 4如果符合则放入结果集不符合则丢弃。回到步骤 1 逐行扫描也就是全表扫描随着数据量增加其查询效率也会越来越低。当数据量达到数百万时就是一场灾难。 2.2 倒排索引 倒排索引中有两个非常重要的概念 文档Document用来搜索的数据其中的每一条数据就是一个文档。例如一个网页、一个商品信息词条Term对文档数据或用户搜索数据利用某种算法分词得到的具备含义的词语就是词条。例如我是中国人就可以分为我、是、中国人、中国、国人这样的几个词条 创建倒排索引是对正向索引的一种特殊处理流程如下 将每一个文档的数据利用算法分词得到一个个词条创建表每行数据包括词条、词条所在文档 id、位置等信息因为词条唯一性可以给词条创建索引例如 hash 表结构索引 如图 倒排索引的搜索流程如下以搜索华为手机为例 1用户输入条件华为手机进行搜索。 2对用户输入内容分词得到词条华为、手机。 3拿着词条在倒排索引中查找可以得到包含词条的文档 id1、2、3。 4拿着文档 id 到正向索引中查找具体文档。 如图 虽然要先查询倒排索引再查询正向索引但是无论是词条、还是文档 id 都建立了索引查询速度非常快无需全表扫描。 2.3 正向和倒排 那么为什么一个叫做正向索引一个叫做倒排索引呢 正向索引是最传统的根据 id 索引的方式。但根据词条查询时必须先逐条获取每个文档然后判断文档中是否包含所需要的词条是根据文档找词条的过程。 而倒排索引则相反是先找到用户要搜索的词条根据词条得到包含词条的文档的 id然后根据 id 获取文档。是根据词条找文档的过程。 是不是恰好反过来了 那么两者方式的优缺点是什么呢 2.3.1 正向索引 优点 可以给多个字段创建索引根据索引字段搜索、排序速度非常快 缺点 根据非索引字段或者索引字段中的部分词条查找时只能全表扫描。 2.3.2 倒排索引 优点 根据词条搜索、模糊搜索时速度非常快 缺点 只能给词条创建索引而不是字段无法根据字段做排序 3. es 的一些概念 elasticsearch 中有很多独有的概念与 mysql 中略有差别但也有相似之处。 3.1 文档和字段 elasticsearch 是面向文档Document存储的可以是数据库中的一条商品数据一个订单信息。文档数据会被序列化为 json 格式后存储在 elasticsearch 中 而 Json 文档中往往包含很多的字段Field类似于数据库中的列。 3.2 索引和映射 索引Index就是相同类型的文档的集合。 例如 所有用户文档就可以组织在一起称为用户的索引所有商品的文档可以组织在一起称为商品的索引所有订单的文档可以组织在一起称为订单的索引 因此我们可以把索引当做是数据库中的表。 数据库的表会有约束信息用来定义表的结构、字段的名称、类型等信息。因此索引库中就有映射mapping是索引中文档的字段约束信息类似表的结构约束。 3.3 mysql 与 elasticsearch 我们统一的把 mysql 与 elasticsearch 的概念做一下对比 MySQLElasticsearch说明TableIndex索引(index)就是文档的集合类似数据库的表(table)RowDocument文档Document就是一条条的数据类似数据库中的行Row文档都是 JSON 格式ColumnField字段Field就是 JSON 文档中的字段类似数据库中的列ColumnSchemaMappingMapping映射是索引中文档的约束例如字段类型约束。类似数据库的表结构SchemaSQLDSLDSL 是 elasticsearch 提供的 JSON 风格的请求语句用来操作 elasticsearch实现 CRUD 是不是说学习了 elasticsearch 就不再需要 mysql 了呢 并不是如此两者各自有自己的擅长支出 Mysql擅长事务类型操作可以确保数据的安全和一致性 Elasticsearch擅长海量数据的搜索、分析、计算 因此在企业中往往是两者结合使用 对安全性要求较高的写操作使用 mysql 实现对查询性能要求较高的搜索需求使用 elasticsearch 实现两者再基于某种方式实现数据的同步保证一致性 4. 安装 es、kibana 4.1 安装 es 4.1.1 部署单点 es 4.1.1.1 创建网络 因为还需要部署 kibana 容器因此需要让 es 和 kibana 容器互联。这里先创建一个网络 docker network create es-net4.1.1.2 加载镜像 采用 elasticsearch 的 7.12.1 版本的镜像这个镜像体积非常大接近 1G。资料提供了镜像的 tar 包。 见专栏 - 全栈资料包 - 资源包/02_cloud 将其上传到虚拟机中然后运行命令加载即可 # 导入数据 docker load -i es.tar同理还有kibana的 tar 包也需要这样做。 4.1.1.3 运行 运行 docker 命令部署单点 es docker run -d \--name es \-e ES_JAVA_OPTS-Xms512m -Xmx512m \-e discovery.typesingle-node \-v es-data:/usr/share/elasticsearch/data \-v es-plugins:/usr/share/elasticsearch/plugins \--privileged \--network es-net \-p 9200:9200 \-p 9300:9300 \ elasticsearch:7.12.1命令解释 -e cluster.namees-docker-cluster设置集群名称-e http.host0.0.0.0监听的地址可以外网访问-e ES_JAVA_OPTS-Xms512m -Xmx512m内存大小-e discovery.typesingle-node非集群模式-v es-data:/usr/share/elasticsearch/data挂载逻辑卷绑定 es 的数据目录-v es-logs:/usr/share/elasticsearch/logs挂载逻辑卷绑定 es 的日志目录-v es-plugins:/usr/share/elasticsearch/plugins挂载逻辑卷绑定 es 的插件目录--privileged授予逻辑卷访问权--network es-net 加入一个名为 es-net 的网络中-p 9200:9200端口映射配置 在浏览器中输入http://192.168.150.101:9200 即可看到 elasticsearch 的响应结果 4.1.2 部署 kibana kibana 可以给我们提供一个 elasticsearch 的可视化界面。 4.1.2.1 部署 运行 docker 命令部署 kibana docker run -d \ --name kibana \ -e ELASTICSEARCH_HOSTShttp://es:9200 \ --networkes-net \ -p 5601:5601 \ kibana:7.12.1--network es-net 加入一个名为 es-net 的网络中与 elasticsearch 在同一个网络中-e ELASTICSEARCH_HOSTShttp://es:9200设置 elasticsearch 的地址因为 kibana 已经与 elasticsearch 在一个网络因此可以用容器名直接访问 elasticsearch-p 5601:5601端口映射配置 kibana 启动一般比较慢需要多等待一会可以通过命令查看运行日志 docker logs -f kibana此时在浏览器输入地址访问http://192.168.150.101:5601即可看到结果 4.1.2.2 DevTools kibana 中提供了一个 DevTools 界面这个界面中可以编写 DSL 来操作 elasticsearch。并且对 DSL 语句有自动补全功能。 4.2 安装分词器 4.2.1 在线安装 ik 插件较慢 # 进入容器内部 docker exec -it elasticsearch /bin/bash# 在线下载并安装 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip#退出 exit #重启容器 docker restart elasticsearch4.2.2 离线安装 ik 插件推荐 4.2.2.1 查看数据卷目录 安装插件需要知道 elasticsearch 的 plugins 目录位置而我们用了数据卷挂载因此需要查看 elasticsearch 的数据卷目录通过下面命令查看 docker volume inspect es-plugins显示结果 [{CreatedAt: 2022-05-06T10:06:3408:00,Driver: local,Labels: null,Mountpoint: /var/lib/docker/volumes/es-plugins/_data,Name: es-plugins,Options: null,Scope: local} ]说明 plugins 目录被挂载到了/var/lib/docker/volumes/es-plugins/_data 这个目录中。 4.2.2.2 解压缩分词器安装包 把资料中的 ik 分词器解压缩重命名为 ik 见专栏 - 全栈资料包 - 资源包/02_cloud 4.2.2.3 上传到 es 容器的插件数据卷中 也就是/var/lib/docker/volumes/es-plugins/_data 4.2.2.4 重启容器 # 重启容器 docker restart es# 查看es日志 docker logs -f es4.2.2.5 测试 IK 分词器包含两种模式 ik_smart最少切分 ik_max_word最细切分 GET /_analyze {analyzer: ik_max_word,text: 小帽课堂学习java太棒了 }结果 {tokens : [{token : 小帽,start_offset : 0,end_offset : 2,type : CN_WORD,position : 0},{token : 课堂,start_offset : 2,end_offset : 5,type : CN_WORD,position : 1},{token : 学习,start_offset : 5,end_offset : 7,type : CN_WORD,position : 2},{token : java,start_offset : 7,end_offset : 11,type : ENGLISH,position : 3},{token : 太棒了,start_offset : 11,end_offset : 14,type : CN_WORD,position : 4},{token : 太棒,start_offset : 11,end_offset : 13,type : CN_WORD,position : 5},{token : 了,start_offset : 13,end_offset : 14,type : CN_CHAR,position : 6}] }4.2.3 扩展词词典 随着互联网的发展“造词运动”也越发的频繁。出现了很多新的词语在原有的词汇列表中并不存在。比如“奥力给” 等。 所以我们的词汇也需要不断的更新IK 分词器提供了扩展词汇的功能。 4.2.3.1 打开 IK 分词器 config 目录 4.2.3.2 在 IKAnalyzer.cfg.xml 配置文件内容添加 ?xml version1.0 encodingUTF-8? !DOCTYPE properties SYSTEM http://java.sun.com/dtd/properties.dtd propertiescommentIK Analyzer 扩展配置/comment!--用户可以在这里配置自己的扩展字典 *** 添加扩展词典--entry keyext_dictext.dic/entry /properties4.2.3.3 新建一个 ext.dic可以参考 config 目录下复制一个配置文件进行修改 奥力给4.2.3.4 重启 elasticsearch docker restart es# 查看 日志 docker logs -f elasticsearch日志中已经成功加载 ext.dic 配置文件 4.2.3.5 测试效果 GET /_analyze {analyzer: ik_max_word,text: 小帽学习Java,奥力给 }注意当前文件的编码必须是 UTF-8 格式严禁使用 Windows 记事本编辑 4.2.4 停用词词典 在互联网项目中在网络间传输的速度很快所以很多语言是不允许在网络上传递的那么我们在搜索时也应该忽略当前词汇。 IK 分词器也提供了强大的停用词功能让我们在索引时就直接忽略当前的停用词汇表中的内容。 4.2.4.1 IKAnalyzer.cfg.xml 配置文件内容添加 ?xml version1.0 encodingUTF-8? !DOCTYPE properties SYSTEM http://java.sun.com/dtd/properties.dtd propertiescommentIK Analyzer 扩展配置/comment!--用户可以在这里配置自己的扩展字典--entry keyext_dictext.dic/entry!--用户可以在这里配置自己的扩展停止词字典 *** 添加停用词词典--entry keyext_stopwordsstopword.dic/entry /properties4.2.4.2 在 stopword.dic 添加停用词 神经病4.2.4.3 重启 elasticsearch # 重启服务 docker restart elasticsearch docker restart kibana# 查看 日志 docker logs -f elasticsearch日志中已经成功加载 stopword.dic 配置文件 4.2.4.4 测试效果 GET /_analyze {analyzer: ik_max_word,text: 小帽课堂学习Java,神经病都点赞,奥力给 }注意当前文件的编码必须是 UTF-8 格式严禁使用 Windows 记事本编辑 4.3 部署 es 集群 部署 es 集群可以直接使用 docker-compose 来完成不过要求 Linux 虚拟机至少有4G的内存空间。首先编写一个 docker-compose 文件内容如下 version: 2.2 services:es01:image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1container_name: es01environment:- node.namees01- cluster.namees-docker-cluster- discovery.seed_hostses02,es03- cluster.initial_master_nodeses01,es02,es03- bootstrap.memory_locktrue- ES_JAVA_OPTS-Xms512m -Xmx512mulimits:memlock:soft: -1hard: -1volumes:- data01:/usr/share/elasticsearch/dataports:- 9200:9200networks:- elastices02:image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1container_name: es02environment:- node.namees02- cluster.namees-docker-cluster- discovery.seed_hostses01,es03- cluster.initial_master_nodeses01,es02,es03- bootstrap.memory_locktrue- ES_JAVA_OPTS-Xms512m -Xmx512mulimits:memlock:soft: -1hard: -1volumes:- data02:/usr/share/elasticsearch/datanetworks:- elastices03:image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1container_name: es03environment:- node.namees03- cluster.namees-docker-cluster- discovery.seed_hostses01,es02- cluster.initial_master_nodeses01,es02,es03- bootstrap.memory_locktrue- ES_JAVA_OPTS-Xms512m -Xmx512mulimits:memlock:soft: -1hard: -1volumes:- data03:/usr/share/elasticsearch/datanetworks:- elasticvolumes:data01:driver: localdata02:driver: localdata03:driver: localnetworks:elastic:driver: bridgeRun docker-compose to bring up the cluster: docker-compose up4.4 总结 分词器的作用是什么 创建倒排索引时对文档分词用户搜索时对输入的内容分词 IK 分词器有几种模式 ik_smart智能切分粗粒度ik_max_word最细切分细粒度 IK 分词器如何拓展词条如何停用词条 利用 config 目录的 IkAnalyzer.cfg.xml 文件添加拓展词典和停用词典在词典中添加拓展词条或者停用词条
http://www.pierceye.com/news/272752/

相关文章:

  • 海口网站建设工作中企动力全球邮企业邮箱
  • 青岛网站制作排名绵阳做网站优化
  • 扬州市建设工程造价管理站网站开发建设网站
  • 广州网站设计公司济南兴田德润o评价潍坊响应式网站建设要多久
  • 网站模板如何优化平阳县建设局网站
  • 厦门外贸网站找谁可以做app的网站
  • 本地电脑静态网站建设游戏代理平台免费
  • 网站建设公司的成本有哪些内容wordpress admin空白
  • 高端网站建设如何收费济南行业网站建设
  • 昆明网站制作专业麦当劳订餐网站 是谁做的
  • 网站代备案公司名称网页游戏怎么搭建
  • 教师在哪些网站可以做兼职做平面的公司网站
  • php网站后台程序做游戏ppt下载网站有哪些
  • 柳州正规网站制作公司佛山企业名录黄页
  • 企业网站做备案网站换域名 百度收录
  • 平面网站模版网站建设需要的费用
  • 营销型网站案例展示如何做网赌网站
  • 商融交通建设工程有限公司网站wordpress的伪静太文件
  • 网站rar文件做sorry动图的网站
  • 有合作社做网站得不备案期间关网站吗
  • 南京城乡住房建设厅网站wordpress文章模板下载
  • 有一个做搞笑英语视频网站外贸建站优化
  • 苏州公司建设网站深圳品牌蛋糕店有哪些品牌排行
  • 手机网站建设视频教程、网站建设项目功能需求分析报告
  • 纸 技术支持 东莞网站建设wordpress 手机 自建站
  • 网站后台 搜索广告发布合同模板
  • 手机网站设计教程网站建设 职位
  • 外贸网站图片素材谷歌seo和百度seo区别
  • 龙华网站 建设深圳信科潍坊网站建设培训
  • 域名网站平台qq在线登录