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

ElasticSearch-ES

1.倒排索引 Ducument Term

倒排索引中有两个非常重要的概念:

  • 文档(Document):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息。
  • 词条(Term):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。例如:我是中国人,就可以分为:我、是、中国人、中国、国人这样的几个词条。

创建倒排索引是对正向索引的一种特殊处理,流程如下:

  • 将每一个文档的数据利用算法分词,得到一个个词条
  • 创建表,每行数据包括词条、词条所在文档id、位置等信息
  • 因为词条唯一性,可以给词条创建索引,例如hash表结构索引
  • elasticsearch是面向文档(Document)存储的,可以是数据库中的一条商品数据,一个订单信息。

2.索引和映射 Index Document Filed Mapping DSL

索引就像数据库里的表,映射就像数据库中定义的表结构。

3.分词器 ik_smart  ik_max_word

IK分词器包含两种模式:

  • ik_smart:最少切分

  • ik_max_word:最细切分

4.索引库操作

索引库就类似数据库表,mapping映射就类似表的结构。

4.1  Mapping映射属性 type(text keyword) index analyzer properties

mapping是对索引库中文档的约束,常见的mapping属性包括:

  • type:字段数据类型,常见的简单类型有:

    • 字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)

      keyword类型只能整体搜索,不支持搜索部分内容

    • 数值:long、integer、short、byte、double、float、

    • 布尔:boolean

    • 日期:date

    • 对象:object

  • index:是否创建索引,默认为true

  • analyzer:使用哪种分词器

  • properties:该字段的子字段

4.2索引库的CRUD

4.2.1创建索引库和映射 PUT /xxx {"mappings": {"properties":{"字段名":{"type": "text"} }  }  }

基本语法:

  • 请求方式:PUT
  • 请求路径:/索引库名,可以自定义
  • 请求参数:mapping映射

4.3文档的CRUD

4.4地理坐标和copy_to:字段拷贝

5.ES搜索引擎

5.1 DSL查询分类

Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括:

  • 查询所有:查询出所有数据,一般测试用。例如:match_all

  • 全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:

    • match_query
    • multi_match_query
  • 精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如:

    • ids
    • range
    • term
  • 地理(geo)查询:根据经纬度查询。例如:

    • geo_distance
    • geo_bounding_box
  • 复合(compound)查询:复合查询可以将上述各种查询条件组合起来,合并查询条件。例如:

    • bool
    • function_score

5.2全文检索查询

match和multi_match的区别是什么?

  • match:根据一个字段查询【推荐:使用copy_to构造all字段】
  • multi_match:根据多个字段查询,参与查询字段越多,查询性能越差

注:搜索字段越多,对查询性能影响越大,因此建议采用copy_to,然后单字段查询的方式。

全文检索查询的基本流程如下:

  • 对用户搜索的内容做分词,得到词条
  • 根据词条去倒排索引库中匹配,得到文档id
  • 根据文档id找到文档,返回给用户

比较常用的场景包括:

  • 商城的输入框搜索
  • 百度输入框搜索

5.3精准查询

精准查询类型:

  • term查询:根据词条精确匹配,一般搜索keyword类型、数值类型、布尔类型、日期类型字段
  • range查询:根据数值范围查询,可以是数值、日期的范围

5.4地理坐标查询

5.5复合查询

复合(compound)查询:复合查询可以将其它简单查询组合起来,实现更复杂的搜索逻辑。常见的有两种:

  • fuction score:算分函数查询,可以控制文档相关性算分,控制文档排名
  • bool query:布尔查询,利用逻辑关系组合多个其它的查询,实现复杂搜索

布尔查询是一个或多个查询子句的组合,每一个子句就是一个子查询。子查询的组合方式有:

  • must:必须匹配每个子查询,类似“与”
  • should:选择性匹配子查询,类似“或”
  • must_not:必须不匹配,不参与算分,类似“非”
  • filter:必须匹配,不参与算分

注意:尽量在筛选的时候多使用不参与算分的must_not和filter,以保证性能良好

每一个不同的字段,其查询的条件、方式都不一样,必须是多个不同的查询,而要组合这些查询,就必须用bool查询了。

需要注意的是,搜索时,参与打分的字段越多,查询的性能也越差。因此这种多条件查询时,建议这样做:

  • 搜索框的关键字搜索,是全文检索查询,使用must查询,参与算分
  • 其它过滤条件,采用filter查询。不参与算分

6.设置搜索结果

查询的DSL是一个大的JSON对象,包含下列属性:

  • query:查询条件
  • from和size:分页条件
  • sort:排序条件
  • highlight:高亮条件
  • aggs:定义聚合

6.1排序

在使用排序后就不会进行算分了,根据排序设置的规则排列

普通字段是根据字典序排序

地理坐标是根据举例远近排序

这个查询的含义是:

  • 指定一个坐标,作为目标点
  • 计算每一个文档中,指定字段(必须是geo_point类型)的坐标 到目标点的距离是多少
  • 根据距离排序

6.2分页

elasticsearch 默认情况下只返回top10的数据。而如果要查询更多数据就需要修改分页参数了。elasticsearch中通过修改from、size参数来控制要返回的分页结果:

  • from:从第几个文档开始
  • size:总共查询几个文档

6.3高亮

6.4数据聚合

聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。

aggs代表聚合,与query同级,此时query的作用是?

  • 限定聚合的的文档范围

聚合必须的三要素:

  • 聚合名称
  • 聚合类型
  • 聚合字段

聚合可配置属性有:

  • size:指定聚合结果数量
  • order:指定聚合结果排序方式
  • field:指定聚合字段

聚合种类

注意:参加聚合的字段必须是keyword、日期、数值、布尔类型

Elasticsearch 常用聚合方法(aggs)分类:

  1. 桶聚合(分组)

    • terms:按字段值精确分组(如按 appname)
    • date_histogram:按时间间隔分组(如按小时 / 天)
    • range:按数值范围分组(如年龄分段)
    • filter/filters:按条件筛选单桶 / 多桶
  2. 指标聚合(计算)

    • count:统计文档数(默认doc_count
    • sum/avg:求和 / 平均值

    • max/min:最大 / 最小值
    • stats:一次性返回 count/sum/avg/max/min
  3. 管道聚合(二次计算)

    • avg_bucket:求多桶指标的平均值
    • max_bucket:找指标最大的桶

常用组合:桶聚合(分组)+ 指标聚合(算统计值),如按 appname 分组后算总日志量和平均响应时间。

7.date_histogram 聚合

date_histogram 是 Elasticsearch 中专门用于时间字段的聚合分析功能,作用是按 “时间间隔”(如每小时、每天、每月)对数据进行分组,统计每个时间区间内的文档数量(或其他指标),生成 “时间分布直方图”。

简单说,它能帮你回答类似这样的问题:

  • “今天每小时有多少条日志?”
  • “过去 7 天每天的订单量是多少?”
  • “每个月的用户注册数有多少?”

核心特点

  1. 只针对时间字段:必须作用于 date 类型的字段(如 @timestamp 日志时间戳、create_time 创建时间等)。
  2. 按时间间隔分组:支持灵活的时间间隔(如小时、天、周、月,甚至分钟、季度等)。
  3. 自动填充空区间:可配置 “即使某段时间没有数据,也返回该区间并计数为 0”,确保时间序列的连续性。

8.term和terms区别

termterms均用于 Elasticsearch 的精确匹配,但核心区别在匹配值数量使用场景,具体可从 3 个维度区分:

1. 核心用途

  • term:针对单个值的精确匹配,仅用于 “筛选符合某一个特定值” 的文档(如筛选appname=tg-portalweb)。
  • terms:有两个场景,一是针对多个值的精确匹配(如筛选appnametg-portalwebtg-userweb),二是用于聚合分组(如按appname的不同值统计数据量)。

2. 输入值与作用阶段

  • term:输入单个值(如字符串"tg-portalweb"、数字1),仅在查询阶段生效,目的是过滤文档。
  • terms:输入数组形式的多个值(如["a","b"]),可在查询阶段(多值筛选)或聚合阶段(分组统计)生效。

3. 结果差异

  • term:返回 “字段值完全等于指定值” 的所有原始文档。
  • terms:查询时返回 “字段值属于指定多值集合” 的原始文档;聚合时返回 “按字段值分组” 的统计结果(如每个分组的文档数量)。

9.总结

wildcard通配符模糊查询

track_total_hits: true 精确统计(适用于超过 10000 条)

 _source :配置需要保留的字段(数组形式)

date_histogram:按照小时/天/月统计每个时间范围内数据量

http://www.dtcms.com/a/542630.html

相关文章:

  • vps搭建个人网站opencart 构建电子商务网站
  • 网站推广怎么做深圳洲聚网站建设
  • 网站优化要做哪些唯尚广告联盟平台
  • 公路建设查询网站wordpress+重复插件
  • 如何申请个人网站域名360官方网站网址
  • 网站建设要什么软件wordpress 调用目录
  • 云南电子政务网站建设网站建设的误区
  • 大学学院教授委员会制度研究(五)-具体运作
  • 网站没有索引量是什么意思空间怎么做网站
  • ai免费模板网站专业建设网站技术
  • 网站建设和维护采购协议app推广联盟
  • 做网站属于什么费用西安推荐企业网站制作平台
  • 免费空间域名可以做淘宝客网站推广吗摄影作品投稿网站
  • 临沧网站建设ynyue淘宝客网站名
  • 如何做商业网站推广建设网站需要的材料
  • 全屏定时提醒工具
  • 网站建设的设立方式淘宝网官网登录
  • 用百度云服务器做网站帝国后台网站如何设置自动刷新首
  • 盐城网站建设网站制作推广wordpress的qq邮件列表qq邮件列表订阅rss源地址怎么找
  • 用腾讯云做购物网站视频做网站保证效果
  • 山东省建设工程管理局网站ps制作网站logo
  • 响应式网站宽度236企业邮箱登陆入口
  • 网站开发商外包论坛网站开发中遇到的问题
  • 【穿越Effective C++】条款7:为多态基类声明virtual析构函数——C++多态资源管理的基石
  • wordpress几个网站共用用户wordpress不能更新
  • 网站建设空间是指什么app开发平台
  • 【仿RabbitMQ的发布订阅式消息队列】--- 模块设计与划分
  • 102.二叉树的层序遍历
  • 互粉的网站是怎么做的浏览器网站入口
  • 企业网站建设参考资料WordPress首页站内搜索