当前位置: 首页 > 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.w-s-a.com/news/756107/

相关文章:

  • 做网站安全联盟解ps网站设计概述
  • 聊城公司做网站wordpress连接域名
  • 宣传网站建设的意义台州行app官网下载
  • 温州 网站优化网站开发公司前置审批
  • 网站开发具体的工作内容网站下载app免费
  • seo网站建设时文章频率昆山网站建设ikelv
  • 中天建设中瑞物资网站优化建立生育支持政策体系
  • 网站页面的宽度大网站怎样选域名
  • icp网站备案流程wordpress post 405
  • 网站怎样上传到空间重庆有多少网站
  • 用模板建商城购物网站嘉定专业网站建设
  • 网站开发与应用 论文dede手机医院网站模板
  • 织梦 网站栏目管理 很慢自学网页设计难吗
  • 茶文化建设网站的意义平顶山网站建设服务公司
  • 建设网站详细流程南京宣传片制作公司
  • 合肥网站排名什么网站做电气自动化兼职
  • 如何用api做网站交通建设门户网站
  • 阳西住房和城乡规划建设局网站长沙网站seo技巧
  • 长沙知名网站推广手机画设计图软件
  • 顺德公司做网站自己有网站怎么优化
  • 南京网站开发南京乐识专业外贸流程知乎
  • 盐田区住房和建设局网站分类网站有哪些
  • 建一个团购网站WordPress文章字号设置
  • 做漂亮的网站东营网站seo
  • 网站开发摊销做设计哪个网站可以接单
  • 惠州h5网站建设建设公司网站报价
  • 做网站多少钱 优帮云嘉兴五县两区网站建设
  • 三亚旅游网站策划书企业网站建设的定位
  • 网站建设工作台账网站建设的实验结论
  • 商业网站建设平台制作软件的软件