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

网站解决访问量超载做衬衣的网站

网站解决访问量超载,做衬衣的网站,物流行业网站建设方案,电脑网页打不开是什么原因前言 上一篇博客我们学习了es的一些基础操作如下#xff1a; 创建索引#xff08;创建表 create table#xff09;查看索引#xff08;查看表show tables#xff09;查看单个索引#xff08;查看单个表show create table#xff09;删除索引#xff08;删除表#x…前言 上一篇博客我们学习了es的一些基础操作如下 创建索引创建表 create table查看索引查看表show tables查看单个索引查看单个表show create table删除索引删除表创建文档插入数据根据唯一标识查看文档根据主键查看一条数据根据唯一标识修改文档所有字段值根据主键修改一条数据根据唯一标识修改文档指定字段值根据主键修改指定字段的值根据唯一标识删除文档根据主键删除对应的一条数据条件删除文档根据条件删除数据创建映射mysql中一般就是创建表只不过es可以动态生成映射查看映射查看表结构 本篇我们继续学习es http的其它操作 高级查询 Elasticsearch 提供了基于 JSON 提供完整的查询 DSL 来定义查询 定义数据 : # POST /student/_doc/1001 { name:zhangsan, nickname:zhangsan,sex:男,age:30 } # POST /student/_doc/1002 { name:lisi, nickname:lisi,sex:男,age:20 } # POST /student/_doc/1003 { name:wangwu,nickname:wangwu,sex:女,age:40 } # POST /student/_doc/1004 { name:zhangsan1, nickname:zhangsan1,sex:女,age:50 } # POST /student/_doc/1005 { name:zhangsan aa, nickname:zhangsan2,sex:女,age:30 }我们先根据上面的数据用自定义的id给student索引中插入文档 其它文档操作类似这里就不截图展示了。 查询所有文档类似于查询表中所有数据select * from table 在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/student/_search {query: {match_all: {}} } # query这里的 query 代表一个查询对象里面可以有不同的查询属性 # match_all查询类型例如match_all(代表查询所有) matchterm range 等等 # {查询条件}查询条件会根据类型的不同写法也有差异服务器响应结果如下 这里就展示一部分数据。 {took【查询花费时间单位毫秒】 : 1116,timed_out【是否超时】 : false,_shards【分片信息】 : {total【总数】 : 1,successful【成功】 : 1,skipped【忽略】 : 0,failed【失败】 : 0},hits【搜索命中结果】 : {total【搜索条件匹配的文档总数】: {value【总命中计数的值】: 3,relation【计数规则】: eq # eq 表示计数准确 gte 表示计数不准确},max_score【匹配度分值】 : 1.0,hits【命中结果集合】 : [。。。}]} }匹配查询 match 匹配类型查询会把查询条件进行分词然后进行查询多个词条之间是 or 的关系 在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/student/_search 服务器响应结果为篇幅原因这里json就不格式化了 这里特别要注意不同的es版本对于分词的处理也不同我们可以看到zhangsan1并没有查出来但是zhangsan aa查出来了说明本次并没有把zhangsan1拆分出zhangsan来因此查不出来。 字段匹配查询 multi_match 与 match 类似不同的是它可以在多个字段中查询。 在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/student/_search 服务器响应结果 关键字精确查询类似于select * from table where name ‘zhangsan’ term 查询精确的关键词匹配查询不对查询条件进行分词。 在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/student/_search {query: {term: {name: {value: zhangsan}}} }服务器响应结果 5. 多关键字精确查询类似于select * from table where name in (‘zhangsan’,‘lisi’) terms 查询和 term 查询一样但它允许你指定多值进行匹配。 如果这个字段包含了指定值中的任何一个值那么这个文档满足条件类似于 mysql 的 in 在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/student/_search {query: {terms: {name: [zhangsan,lisi]}} }服务器响应结果 6. 指定查询字段类似于select name,nickname from table where nickname ‘zhangsan’ 默认情况下Elasticsearch 在搜索的结果中会把文档中保存在_source 的所有字段都返回。 如果我们只想获取其中的部分字段我们可以添加_source 的过滤 在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/student/_search {_source: [name,nickname],query: {terms: {nickname: [zhangsan]}} }服务器响应结果 7. 过滤字段还是类似与select 指定的字段 我们也可以通过 includes来指定想要显示的字段这个和上面一样只不过上面是把includes忽略了excludes来指定不想要显示的字段这个在mysql中并没有类似的一般mysql想选择什么字段需要一个一个些出来感觉用处是有但没有那么大 在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/student/_search {_source: {includes: [name,nickname]},query: {terms: {nickname: [zhangsan]}} }服务器响应结果 在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/student/_search {_source: {excludes: [name,nickname]},query: {terms: {nickname: [zhangsan]}} }服务器响应结果 8. 组合查询 bool把各种其它查询通过must必须 、must_not必须不、should应该的方式进行组合 must 含义所有包含在 must 数组中的查询条件都必须为真即所有条件都必须满足文档才会被返回。 等价逻辑运算符AND 应用场景当你需要确保多个条件同时成立时使用。 假设你想查找姓名中包含“shangsan”并且nickname是“zhangsan”的学生可以这样写 {query: {bool: {must: [{match: {name: zhangsan}},{match: {nickname: zhangsan}}]}} }must_not 含义所有包含在 must_not 数组中的查询条件都必须为假即这些条件都不能满足文档才会被返回。 等价逻辑运算符NOT 应用场景当你想要排除某些特定条件时使用。 如果你想查找name中包含“zhangsan”但nickname不是“lisi”的学生可以这样写 {query: {bool: {must: [{match: {name: zhangsan}}],must_not: [{match: {nickname: lis}}]}} }should 含义should 数组中的查询条件至少有一个为真即可即满足任意一个条件即可文档就会被返回。你可以通过设置 minimum_should_match 参数来指定最少需要满足的条件数量。 等价逻辑运算符OR 应用场景当你希望满足任意一个或多个条件时使用。 如果你想查找name中包含“zhangsan”或nickname是“zhangsan1”的学生可以这样写 {query: {bool: {should: [{match: {name: zhangsan}},{match: {nickname: zhangsan1}}]}} }当然可以组合查询在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/student/_search {query: {bool: {must: [{match: {name: zhangsan}}],must_not: [{match: {nickname: lisi}}]}} }服务器响应结果 范围查询 range 查询找出那些落在指定区间内的数字或者时间。range 查询允许以下字符 在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/student/_search {query: {range: {age: {gte: 30,lte: 35}}} }报错了Cannot search on field [age] since it is not indexed 根据上一篇博客我们知道index一旦为false那么就不能用来查询所以我们看看age字段的index是不是为false: 果不其然这就是上篇博客说的动态映射的缺点了我们需要更改一下映射更改索引的方法看下面修改索引我们临时修改改了一个名字叫tmp_student的索引修改完后我们再次执行 服务器响应结果 10. 模糊查询相当于sql中的select * from table where name like ‘%zhangsan%’ 返回包含与搜索字词相似的字词的文档。 编辑距离是将一个术语转换为另一个术语所需的一个字符更改的次数。这些更改可以包括 更改字符box → fox删除字符black → lack插入字符sic → sick转置两个相邻字符act → cat 为了找到相似的术语fuzzy 查询会在指定的编辑距离内创建一组搜索词的所有可能的变体 或扩展。然后查询返回每个扩展的完全匹配。 通过 fuzziness 修改编辑距离。一般使用默认值 AUTO根据术语的长度生成编辑距离。 在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/student/_search {query: {fuzzy: {name: {value: zhangsan}}} }服务器响应结果 在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/student/_search {query: {fuzzy: {name: {value: zhangsan,fuzziness: 2}}} }fuzziness设置为2 服务器响应结果 单字段排序 sort 可以让我们按照不同的字段进行排序并且通过 order 指定排序的方式。desc 降序asc 升序。 我们现在索引中name为zhangsan相关的两个年龄都为30我们再插入一条数据方便进行排序测试 在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/tmp_student/_search {query: {match: {name: zhangsan}},sort: [{age: {order: desc}}] }服务器响应结果 12. 多字段排序 假定我们想要结合使用 age 和 _id 进行查询并且匹配的结果首先按照年龄排序然后 按照id排序 在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/student/_search {query: {match_all: {}},sort: [{age: {order: desc}},{_id: {order: desc}}] }13. 高亮查询 在进行关键字搜索时搜索出的内容中的关键字会显示不同的颜色称之为高亮。 Elasticsearch 可以对查询内容中的关键字部分进行标签和样式(高亮)的设置。 在使用 match 查询的同时加上一个 highlight 属性 pre_tags前置标签post_tags后置标签fields需要高亮的字段title这里声明 title 字段需要高亮后面可以为这个字段设置特有配置也可以空 在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/tmp_student/_search {query: {match: {name: zhangsan}},highlight: {pre_tags: font colorred,post_tags: /font,fields: {name: {}}} }14. 分页查询 from当前页的起始索引默认从 0 开始。 from (pageNum - 1) * size size每页显示多少条 在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/tmp_student/_search {query: {match_all: {}},sort: [{age: {order: desc}}],from: 0,size: 2 }15. 聚合查询 聚合允许使用者对 es 文档进行统计分析类似与关系型数据库中的 group by当然还有很多其他的聚合例如取最大值、平均值等等。 对某个字段取最大值 max 在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/tmp_student/_search {aggs: {max_age: {max: {field: age}}},size: 0 }对某个字段取最小值 min 在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/tmp_student/_search {aggs: {min_age: {min: {field: age}}},size: 0 }对某个字段求和 sum 在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/tmp_student/_search {aggs: {sum_age: {sum: {field: age}}},size: 0 }对某个字段取平均值 avg {aggs: {avg_age: {avg: {field: age}}},size: 0 }对某个字段的值进行去重之后再取总数 在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/tmp_student/_search {aggs: {distinct_age: {cardinality: {field: age}}},size: 0 }State 聚合 stats 聚合对某个字段一次性返回 countmaxminavg 和 sum 五个指标 在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/tmp_student/_search {aggs: {stats_age: {stats: {field: age}}},size: 0 }16. 桶聚合查询 桶聚和相当于 sql 中的 group by 语句 terms 聚合分组统计 在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/tmp_student/_search {aggs: {age_groupby: {terms: {field: age}}},size: 0 }在 terms 分组下再进行聚合 在 Postman 中向 ES 服务器发 GET 请求 http://127.0.0.1:9200/tmp_student/_search {aggs: {age_groupby: {terms: {field: age}}},size: 0 }修改索引 在es中是不支持更改现有字段的映射或字段类型的如果我们非得需要更改字段的类型怎么办数据迁移重建索引建立我们想要的正确的映射规则 查看旧的索引 {student: {mappings: {properties: {age: {type: long,index: false},name: {type: text},nickname: {type: text,fields: {keyword: {type: keyword,ignore_above: 256}}},sex: {type: text,index: false}}}} }创建新的索引 {mappings: {properties: {age: {type: long,index: true},name: {type: text},nickname: {type: text,fields: {keyword: {type: keyword,ignore_above: 256}}},sex: {type: text,index: false}}} }数据迁移 {source: {index: student},dest: {index: tmp_student} }match和term 当然可以。match 查询和 term 查询在 Elasticsearch 中确实有不同的行为特别是在处理分析分词和全文搜索方面。下面通过具体的例子来说明它们之间的区别。 示例场景图书索引 假设你有一个包含书籍信息的索引 books每个文档代表一本书并且有以下字段 title: 书名类型为 text并且默认包含一个 keyword 子字段 title.keyword。author: 作者名类型为 text并且默认包含一个 keyword 子字段 author.keyword。 示例数据 idtitleauthor1Elasticsearch GuideJohn Doe2Learning ElasticsearchJane Smith3Mastering ElasticsearchJohn Doe-Smith4Elasticsearch BasicsJohn Doe Jr. 使用 match 查询 match 查询会分析查询字符串并尝试匹配文档中的相应词条。这使得它可以用于全文搜索支持部分匹配和模糊匹配。 示例查询查找包含 “elasticsearch” 的书籍 GET /books/_search {query: {bool: {must: [{match: {title: elasticsearch}}]}} }这段查询会返回所有标题中包含词条 elasticsearch 的书籍例如 id: 1 - “Elasticsearch Guide”id: 2 - “Learning Elasticsearch”id: 3 - “Mastering Elasticsearch”id: 4 - “Elasticsearch Basics” 这是因为 match 查询会对查询字符串 elasticsearch 进行分析并将其视为单个词条来匹配。 示例查询查找作者名为 “John Doe” 的书籍 GET /books/_search {query: {bool: {must: [{match: {author: John Doe}}]}} }这段查询会返回所有作者名中包含词条 john 和 doe 的书籍例如 id: 1 - “John Doe”id: 3 - “John Doe-Smith”id: 4 - “John Doe Jr.” 这是因为 match 查询会对查询字符串 John Doe 进行分析并将它分解为两个词条 john 和 doe 来匹配。 使用 term 查询 term 查询不会对查询字符串进行任何分析或分词而是直接将整个值作为单个词条来查找。这意味着它适合用于精确匹配如用户ID、状态码、类别名称等。 示例查询查找标题恰好为 “Elasticsearch Guide” 的书籍 GET /books/_search {query: {bool: {must: [{term: {title.keyword: Elasticsearch Guide}}]}} }这段查询只会返回 id: 1 的那本书因为它完全匹配了给定的字符串。 示例查询查找作者名为 “John Doe” 的书籍 GET /books/_search {query: {bool: {must: [{term: {author.keyword: John Doe}}]}} }这段查询只会返回 id: 1 的那本书因为它完全匹配了给定的字符串 John Doe。id: 3 和 id: 4 的书籍不会被返回因为它们的作者名不完全匹配。 关键区别总结 match 查询 分析对查询字符串进行分析分词然后匹配包含这些词条的文档。应用场景适用于全文搜索支持部分匹配和模糊匹配。示例查询 John Doe 可能返回包含 John, Doe, John Doe-Smith, John Doe Jr. 等文档。 term 查询 不分析不进行分析直接匹配完整词条。应用场景适用于精确匹配如用户ID、状态码、类别名称等。示例查询 John Doe 只会返回完全匹配 John Doe 的文档。 总结 match 查询和 term 查询在 Elasticsearch 中有着不同的用途和行为 match 查询 更适合用于全文搜索支持分析和部分匹配适用于 text 类型的字段。term 查询 更适合用于精确匹配不涉及分析过程适用于 keyword 类型的字段。 通过正确理解和选择 match 和 term 查询你可以构建更加高效和准确的查询逻辑。如果你需要进行全文搜索请使用 match 查询如果你需要进行精确匹配请使用 term 查询并针对 keyword 字段。 模糊匹配类似于sql中的like 如果你希望查询能够匹配部分相似的字段可以考虑以下几种方法 1. 使用 wildcard 查询 wildcard 查询允许你使用通配符模式来进行模糊匹配。你可以用 * 表示任意数量的字符 {query: {bool: {must: [{wildcard: {name: zhangsan*}}]}} }这种方法适用于前缀匹配但它可能比 match 查询更慢特别是在大数据集上。 2. 使用 prefix 查询 prefix 查询用于查找以指定字符串开头的所有文档 {query: {bool: {must: [{prefix: {name: zhangsan}}]}} }这将返回所有 name 以 zhangsan 开头的文档。 3. 使用 fuzzy 查询 fuzzy 查询允许一定范围内的编辑距离Levenshtein 距离从而实现模糊匹配 {query: {bool: {must: [{match: {name: {query: zhangsan,fuzziness: AUTO}}}]}} }这将返回与 zhangsan 接近的名称包括拼写错误或其他轻微变化。 4. 使用 keyword 子字段进行精确匹配或前缀匹配 如果你希望进行精确匹配或者基于原始值的前缀匹配可以利用 name.keyword 子字段假设你已经在映射中定义了这个子字段 {query: {bool: {must: [{prefix: {name.keyword: zhangsan}}]}} }这种方法确保了查询不会受到分析器的影响提供了更精确的匹配。 总结 match 查询的行为是基于词条匹配的而不是基于整个字符串的精确匹配。因此它只会返回那些明确包含查询词条的文档。如果你想匹配部分相似的名字可以考虑使用 wildcard、prefix、fuzzy 查询或者直接针对 keyword 子字段进行查询。选择哪种方法取决于你的具体需求和性能考虑。 如果你的目标是实现类似于 MySQL LIKE 的前缀匹配行为prefix 或 wildcard 查询通常是更好的选择。
http://www.hkea.cn/news/14344785/

相关文章:

  • 本地集团网站建设做百度推广需要什么条件
  • 苏州专业做网站公司电话网站建设之婚礼摄影网站设计
  • 西安网站建设中心浙江华企网站做的咋样
  • 教人做衣服的网站公司网站开发费用兴田德润在哪儿
  • 微信网站页面设计yyf做的搞笑视频网站
  • 如何做微信电子书下载网站百度网址大全手机浏览器
  • 网站建设公司网络服务网站建设费用详细表
  • python做的网站哪些上海搬家公司收费价目表2021
  • 做外贸网哪些网站免费国内网站备案流程
  • 网站建设可行性报告模板怎么网络推广自己业务
  • 做网站找合作伙伴绵阳网站建设培训
  • 长春建筑网站无代码网站开发平台
  • 北京燕郊网站建设做外单网站亚马逊
  • 做付费推广是网站好还是单页面好数商云官网
  • 郑州网站建设q.479185700棒WordPress主题设置保存
  • 原创文章对网站的好处初中校园网站建设制度
  • 政务网站设计鉴赏上海微网站
  • 婚庆摄影网站模板如何免费做推广
  • 企业网站建设综合实训学习体会福州专业网站营销
  • 企业网站建设的方法推广营销
  • 网站源码是什么意思网站底部广告代码
  • 公司微信网站建设方案模板平台制作计划
  • 销售网站是什么学习网
  • 杰讯山西网站建设网站开发项目建设规范
  • 做网站开发 用什么软件如何做简单的网站
  • 建的网站打开很慢高邮市建设网站
  • 高端网站哪个比较好网站设计的素材有哪些
  • 网站备案人授权2022网页游戏排行榜
  • 广告网站建设报价cordova wordpress
  • 广州建企业网站建站模板工程造价