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

下沙网站制作江门公司网站建设

下沙网站制作,江门公司网站建设,wordpress怎么设置自己的模板,中国一级建造师四、ElasticSearch进阶 https://www.elastic.co/guide/en/elasticsearch/reference/7.4/getting-started-search.html 1.ES中的检索方式 在ElasticSearch中支持两种检索方式 通过使用REST request URL 发送检索参数(uri检索参数)通过使用 REST request body 来发送检索参数…四、ElasticSearch进阶 https://www.elastic.co/guide/en/elasticsearch/reference/7.4/getting-started-search.html 1.ES中的检索方式 在ElasticSearch中支持两种检索方式 通过使用REST request URL 发送检索参数(uri检索参数)通过使用 REST request body 来发送检索参数 (uri请求体) 第一种方式 GET bank/_search # 检索bank下的所有信息包括 type 和 docs GET bank/_search?q*sortaccount_number:asc 响应结果信息 信息描述tookElasticSearch执行搜索的时间(毫秒)time_out搜索是否超时_shards有多少个分片被搜索了统计成功/失败的搜索分片hits搜索结果hits.total搜索结果统计hits.hits实际的搜索结果数组(默认为前10条文档)sort结果的排序key没有就按照score排序score和max_score相关性得分和最高分(全文检索使用) 第二种方式 通过使用 REST request body 来反射检索参数 (uri请求体) GET bank/_search {query:{match_all:{}},sort:[{account_number:desc }] }2.Query DSL 2.1 基本语法 ElasticSearch提供了一个可以执行的JSON风格的DSL(domain-specific language 领域特定语言)这个被称为Query DSL该查询语言非常全面并且刚开始的时候感觉有点复杂真正学好它的方法就是从一些基础案例开始的。 完整的语法结构 {QUERY_NAME:{ARGUMENT:VALUE,ARGUMENT:VALUE,...} }如果是针对某个字段那么它的结构为 {QUERY_NAME:{FIELD_NAME:{ARGUMENT:VALUE,ARGUMENT:VALUE,...}} }2.2 match 上面我们用到来的match_all是匹配所有的数据而我们现在要讲的match是条件匹配 如果对应的字段是基本类型(非字符串类型)则是精确匹配。 GET bank/_search {query:{match:{account_number:20}} }match返回的是 account_number:20的记录 如果对应的字段是字符串类型则是全文检索 GET bank/_search {query:{match:{address:mill}} }match返回的就是address中包含mill字符串的记录 2.3 match_phrase 将需要匹配的值当成一个整体单词(不分词)进行检索短语匹配 GET bank/_search {query:{match_phrase:{address:mill road}} }查询出address中包含 mill road的所有记录并给出相关性得分 2.4 multi_match[多字段匹配] GET bank/_search {query:{multi_match:{query:mill road,fields:[address,state]}} }查询出state或者address中包含 mill road的记录 2.5 bool[复合查询] 布尔查询又叫组合查询bool用来实现复合查询 bool把各种其它查询通过 must与、must_not非、should或的方式进行组合 复合语句可以合并任何其他查询语句包括复合语句也可以合并了解这一点很重要这意味着复合语句之间可以相互嵌套可以表达非常复杂的逻辑。 GET /bank/_search {query: {bool: {must: [{ match: { age: 40 } }],must_not: [{ match: { state: ID } }]}} }2.6 filter[结果过滤] 并不是所有的查询都需要产生分数特别是那些仅用于filtering的文档为了不计算分数ElasticSearch会自动检查场景并且优化查询的执行。 GET /bank/_search {query: {bool: {must: { match_all: {} },filter: {range: {balance: {gte: 20000,lte: 30000}}}}} }2.7 term 和match一样匹配某个属性的值全文检索字段用match其他非text字段匹配用term GET bank/_search {query:{term:{account_number:20}} }检索关键字描述term非text使用match在text中我们实现全文检索-分词match keyword在属性字段后加.keyword 实现精确查询-不分词match_phrase短语查询不分词模糊查询 3.聚合(aggregations) 聚合可以让我们极其方便的实现对数据的统计、分析。例如 什么品牌的手机最受欢迎这些手机的平均价格、最高价格、最低价格这些手机每月的销售情况如何 实现这些统计功能的比数据库的sql要方便的多而且查询速度非常快可以实现实时搜索效果。 语法规则 aggregations : {aggregation_name : {aggregation_type : {aggregation_body}[,meta : { [meta_data_body] } ]?[,aggregations : { [sub_aggregation] } ]?}[,aggregation_name_2 : { ... } ]* }https://www.elastic.co/guide/en/elasticsearch/reference/7.4/search-aggregations.html 3.1 基本概念 Elasticsearch中的聚合包含多种类型最常用的两种一个叫 桶一个叫 度量 桶bucket 桶的作用是按照某种方式对数据进行分组每一组数据在ES中称为一个 桶例如我们根据国籍对人划分可以得到 中国桶、英国桶日本桶……或者我们按照年龄段对人进行划分010,1020,2030,3040等。 Elasticsearch中提供的划分桶的方式有很多 Date Histogram Aggregation根据日期阶梯分组例如给定阶梯为周会自动每周分为一组Histogram Aggregation根据数值阶梯分组与日期类似Terms Aggregation根据词条内容分组词条内容完全匹配的为一组Range Aggregation数值和日期的范围分组指定开始和结束然后按段分组…… bucket aggregations 只负责对数据进行分组并不进行计算因此往往bucket中往往会嵌套另一种聚合metrics aggregations即度量 度量metrics 分组完成以后我们一般会对组中的数据进行聚合运算例如求平均值、最大、最小、求和等这些在ES中称为 度量 比较常用的一些度量聚合方式 Avg Aggregation求平均值Max Aggregation求最大值Min Aggregation求最小值Percentiles Aggregation求百分比Stats Aggregation同时返回avg、max、min、sum、count等Sum Aggregation求和Top hits Aggregation求前几Value Count Aggregation求总数…… 3.2 案例讲解 案例1:搜索address中包含mill的所有人的年龄分布以及平均年龄 GET /bank/_search {query: {match: {address: mill}},aggs: {ageAgg: {terms: {field: age,size: 10}},ageAvg:{avg: {field: age}}},size: 0 }案例2按照年龄聚合并且请求这些年龄段的这些人的平均薪资 GET /bank/_search {query: {match_all: {}},aggs: {ageAgg: {terms: {field: age,size: 50},aggs: {balanceAvg: {avg: {field: balance}}}}},size: 0 }案例3查出所有年龄分布并且这些年龄段中M的平均薪资和F的平均薪资以及这个年龄段的总体平均薪资。 GET /bank/_search {query: {match_all: {}},aggs: {ageAgg: {terms: {field: age,size: 50},aggs: {genderAgg: {terms: {field: gender.keyword,size: 10},aggs: {balanceAvg: {avg: {field: balance}}}},ageBalanceAvg:{avg: {field: balance}}}}},size: 0 }4.映射配置(_mapping) 查看索引库中所有的属性的_mapping 4.1 ElasticSearch7-去掉type概念 关系型数据库中两个数据表示是独立的即使他们里面有相同名称的列也不影响使用但ES中不是这样的。elasticsearch是基于Lucene开发的搜索引擎而ES中不同type下名称相同的filed最终在Lucene中的处理方式是一样的。 两个不同type下的两个user_name在ES同一个索引下其实被认为是同一个filed你必须在两个不同的type中定义相同的filed映射。否则不同type中的相同字段名称就会在处理中出现冲突的情况导致Lucene处理效率下降。 去掉type就是为了提高ES处理数据的效率。 Elasticsearch 7.x URL中的type参数为可选。比如索引一个文档不再要求提供文档类型。 Elasticsearch 8.x 不再支持URL中的type参数。 解决将索引从多类型迁移到单类型每种类型文档一个独立索引 4.2 什么是映射 映射是定义文档的过程文档包含哪些字段这些字段是否保存是否索引是否分词等 4.3 创建映射字段 PUT /索引库名/_mapping/类型名称 {properties: {字段名: {type: 类型,index: truestore: trueanalyzer: 分词器}} }类型名称就是前面将的type的概念类似于数据库中的不同表 字段名类似于列名properties下可以指定许多字段。 每个字段可以有很多属性。例如 type类型可以是text、long、short、date、integer、object等index是否索引默认为truestore是否存储默认为falseanalyzer分词器这里使用ik分词器ik_max_word或者ik_smart 4.4 新增映射字段 如果我们创建完成索引的映射关系后又要添加新的字段的映射这时怎么办第一个就是先删除索引然后调整后再新建索引映射还有一个方式就在已有的基础上新增。 PUT /my_index/_mapping {properties:{employee-id:{type:keyword,index:false}} }4.5 更新映射 对于存在的映射字段我们不能更新更新必须创建新的索引进行数据迁移 4.6 数据迁移 先创建出正确的索引然后使用如下的方式来进行数据的迁移 POST_reindex [固定写法]{ “source”:{ “index”:“twitter” }, “dest”:{ “index”:“new_twitter” }} 老的数据有type的情况 POST_reindex [固定写法]{ “source”:{ “index”:“twitter” “type”:“account” }, “dest”:{ “index”:“new_twitter” }} 案例新创建了索引并指定了映射属性 5.分词 所谓的分词就是通过tokenizer(分词器)将一个字符串拆分为多个独立的tokens(词元-独立的单词)然后输出为tokens流的过程。 例如my name is HanMeiMei这样一个字符串就会被默认的分词器拆分为[my,name,is HanMeiMei].ElasticSearch中提供了很多默认的分词器我们可以来演示看看效果 但是在ElasticSearch中提供的分词器对中文的分词效果都不好。 所以这时我们就需要安装特定的分词器 IK 1) 安装ik分词器 https://github.com/medcl/elasticsearch-analysis-ik 下载对应的版本然后解压缩到plugins目录中 然后检查是否安装成功进入容器 通过如下命令来检测 检查下载的文件是否完整如果不完整就重新下载。 插件安装OK后我们重新启动ElasticSearch服务 2) ik分词演示 ik_smart分词 # 通过ik分词器来分词 POST /_analyze {analyzer: ik_smart,text: 我是中国人我热爱我的祖国 } ik_max_word POST /_analyze {analyzer: ik_max_word,text: 我是中国人我热爱我的祖国 }通过ik分词器的使用我们发现如果使用ElasticSearch中默认提供的分词器是不支持中文分词的也就是我们在定义一个索引的使用不能使用默认的mapping而是要手动的来建立对应的mapping在mapping我们需要选择对应的分词器。 3) 自定义词库 虚拟机扩容 安装的软件越来越多虚拟机的空间有限这时我们可以关闭虚拟机后扩容 ElasticSearch中原来分配的空间比较小虚拟机空间增大后我们可以调整ElasticSearch的空间。 调整ElasticSearch的虚拟机内存我们没办法直接修改需要先删除原来的容器然后创建新的容器。 调整JVM参数后重新启动容器 docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \-e discovery.typesingle-node -e ES_JAVA_OPTS-Xms64m -Xmx512m -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins -d elasticsearch:7.4.2Nginx安装 先安装一个简单的Nginx实例来获取对应的配置信息 拉取Nginx的镜像 启动Nginx服务 docker run -d -p 80:80 --name nginx nginx:1.10 把容器中的配置文件拷贝到/mydata/nginx目录中 docker container cp nginx:/etc/nginx . 有了这个对应的配置文件夹后我们就可以删除掉之前的Nginx服务了 然后创建新的Nginx服务 docker run -d -p 80:80 --name nginx \ -v /mydata/nginx/html:/usr/share/nginx/html \ -v /mydata/nginx/logs:/var/log/nginx \ -v /mydata/nginx/conf:/etc/nginx \ nginx:1.10测试访问 实现自定义词库 我们需要在Nginx中创建对应的词库文件 然后我们在ik分词器的插件的配置文件中修改远程词库的地址 /mydata/elasticsearch/plugins/ik/config 然后保存文件重启ElasticSearch服务即可 然后在Kibana中检索测试即可
http://www.hkea.cn/news/14279954/

相关文章:

  • 温州网站建设方案外包长沙seo制作
  • 关于网站建设的实训报告网站域名服务器查询
  • 罗湖网站建设设计怎么做游戏门户网站
  • 网站百度快照怎么做合肥市有做网站的公司吗
  • 怎么在阿里云建网站郴州专业的网站建设
  • 网站开发第三方公司网站制作的方法
  • 无锡大型设计网站报价国外修图教程网站
  • 响应式外贸网站案例临泉做网站
  • 北京网站优化专家高端的饰品行业网站开发
  • 网页版微信消息撤回连云港优化网站团队
  • 珠海建站wordpress 电影天堂 主题
  • 做微商截图的网站海报设计兼职app
  • 多站点wordpress简数采集器商城网站多少钱
  • 搭建网站的方法做网站公司300元钱
  • 移动网站功能WordPress数据库搬迁
  • 网站编辑招聘社交做的最好的网站
  • 南京建站平台网站参数设定
  • 个人soho要怎么做企业网站黄页网络的推广网
  • 什么是网站挂马多语言网站一个域名
  • 网站制作的动画怎么做的山东泰安旅游景点大全
  • 做海报那个网站好emlog文章转wordpress
  • 12.12做网站的标题做一个app上架需要多少费用
  • 怎么做外网网站监控网站建设范围
  • 模仿 网站如何推广app让别人注册
  • 初中做数学题的网站有没有做面粉美食的网站
  • 网站建设怎么找客源?北京做药流凤凰网站
  • 系统管理主要包括哪些内容搜索引擎技术优化
  • 陶瓷网站策划书快速微信网站建设
  • 有网站后台模板如何做数据库响应式企业网站模板
  • 网站制作添加视频ui设计的优势与不足