Elasticsearch简介

  疫情已经持续了好几个月了,作为程序员滴我们也帮不上什么忙,只有老老实实呆在家里或者出门一定戴口罩准守一些规则,不给国家添乱。不过最近疫情开始有所扭转,但是还是对国家经济,对企业业务造成了很大的影响,我也被停止了实习。接下来,可能会面临着失业,破产等等严肃的问题。但是我们还是需要继续学习,提高自己的竞争力,才能在疫情过后,有自己的一席之地,可以在合适自己的地方发挥自己的作用。中国加油,武汉加油。

全文检索Elasticsearch

1. 相关特点:

  • 分布式,无需人工搭建集群(solr需要人为配置,使用zookeeper作为注册中心)
  • Restful风格,一切API都遵循Rest原则,容易上手
  • 近实时搜索,数据更新在ElasticSearch中几乎是完全同步的。

2. 操作索引

  1. 基本概念:Elasticsearch是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySql类似的。
  2. // 对比关系索引集(indices)------------------------------------------------Databases 数据库        类型(type)---------------------------------------------Table 数据表                文档(Document)-----------------------------Row 行                        字段(Field)----------------------Columns列
  3. 相关解释:
    • 类型(type):一个索引库下可以有不同类型的索引,比如商品类型、订单类型,其数据格式不同。不过这回导致索引库混乱,因此未来版本会移除这个概念。
    • 映射配置(mappings):字段的数据类型、属性、是否索引、是否存储等特性。
    • 分片(shard):数据拆分后的各个部分。
    • 副本(replica):每个分片的复制。
    • 注意:Elasticsearch本身就是分布式的,因此即使你只有一个节点,Elasticsearch默认也会对你的数据进行分片和副本操作,当你向集群添加数据时,数据也会在新加入的节点中进行平衡。

a、创建索引:
  • 请求方式:PUT
  • 请求路径:ip地址:端口号/索引库名(下文相关 HTTP请求路径 省略)
  • 请求参数:json格式
  • 例子:
    {       // settings: 索引库的设置。"settings": {"number_of_shards": 3,     // 分片数量"number_of_replicas": 2    // 副本数量}}
b、删除索引
  • 请求方式:DELETE
  • 请求路径:/索引库名
c、查询索引
  • 请求方式:GET
  • 请求路径:/索引库名
d、创建映射字段
  • 请求方式:PUT
  • 请求路径:/索引库名/_mapping/类型名称
  • 请求参数:json格式
    • 例子:

      {"properties": {"字段名": {"type": "类型","index": true,"store": true,"analyzer": "分词器"  // 分词器}}}
  • 相关解释
    • 类型名称:就是type的概念,类似于数据库中的不同表
    • 字段名:任意写,可以指定许多属性,例如
      • type类型,可以是String类型(text【可分词】、keyword【不可分词】)、long、short、date、integer、object等。

        • 注意:如果存的是对象,比如:{girl: {name:"rose",age:21}} 会被处理成两个字段:girl.name和girl.age

      • index:是否索引,默认为true。如果索引,则可以用来搜索。
      • store:是否存储,默认为false。在Elasticsearch中,即便store设为false,也可以搜索到结果(原因:Elasticsearch在创建文档搜索时,会将文档中的原始数据备份,保存到一个叫做_source的属性中。而且我们可以通过过滤_source来选择那些需要显示,那些不显示。

3. 新增数据

  • 随机生成id

    • 请求方式:POST
    • 请求路径:/索引库名/类型名称
    • 请求参数: { "key":  "value" }
  • 自定义id
  • POST /索引库名/类型名称/id值{...}
  • 智能判断:
    • solr:新增数据时,只能使用提前配置好映射属性的字段,否则会报错。
    • Elasticsearch:不需要给索引库设置任何mapping映射,它也可以根据你输入的数据来判断类型,动态添加数据映射。(如果存储的是String类型数据,ES无智能判断,它会存入两个字段。例如:存入一个name字段,智能形成两个字段  name: text类型    name.keyword: keyword类型)

4. 修改数据:

  • 请求方式: PUT
  • 请求路径:/索引库名/类型名称/id值
  • 注意:修改必须指定id。id对应的文档存在,则修改;id对应文档不存在,则新增。

5.  查询

  • 基本查询:

    GET /索引库名/_search{"query": {"查询类型": {"查询条件":"查询条件值"}}}例子:  GET /article/_search{"query": {"match": {"title": {"query": "广州上海","operator":"and"}}}}
    • 查询类型:

      • 查询所有(match_all)【全文检索】
      • 多字段查询(multi_match)
      • GET /索引库名/_search{"query": {"multi_match": {"query": "查询内容","fields": ["查询字段1","查询字段2"]}}}
      • 词条匹配(term):查询被用于精确值匹配,这些精确值可能是数字、时间、布尔或者那些未分词的字符串。推荐除了text以外的类型用term,减少分词带来的消耗,例
        GET /索引库名/_search{"query": {"term": {"查询字段":"查询内容"}}}
      • 结果过滤:{ "_source" : [ "过滤字段1" , "过滤字段2" ] }。
        {"_source": {# "includes": "过滤字段"# 和上面作用一样"excludes":"排除过滤字段"}}
  • 高级查询
    • 模糊查询(fuzzy)
    • 范围查询(range)
      GET /索引库名/_search{"query": {"range": {"查询字段": {"gte": 数值,# 大于,可省略"lte": 数值# 小于,可省略}}}}
    • 布尔查询和过滤
      GET /索引库名/_search{"query": {"bool": {"must": [{"match": {"查询字段": "查询内容"}}],"filter": {"range": {"过滤字段": {"gte": 数值}}}}}}
    • 排序
      "sort": [{"排序字段": {"order": "desc"  # 降序排序}}]
    • 分页: "from" : 数值   "size" : 数值

6. 聚合aggregations:实现对数据的统计、分析

  • 基本概念:包括多种类型,最常见的两种,一个叫 桶(bucket),一个叫 度量(metrics)

    • 桶:作用:是按照某种方式对数据进行分组,每一组数据在es中称为一个桶(组)。

      • Terms Aggregation:根据词条内容分组,词条内容完全匹配的为一组
      • Range Aggregation:数值和日期的范围分组,指定开始和结束,然后按段分组
      • Histogram Aggregation:根据数值阶梯(Inteval)分组
      • Date Aggregation:根据日期阶梯分组,例如:给定阶梯为周,会自动每周分为一组
      • GET /索引库名/_search{"aggs": {"桶分组名称": {"桶分组方式": {"field": "分桶字段"}}}}
    • 度量:分组完以后,一般会对组中的数据进行聚合运算,例如:求平均值、最大、最小、求和等,这些在es中称为度量
      • Avg Aggregation:求平均值
      • Max Aggregation:求最大值
      • Min Aggregation:求最小值
      • Percentiles Aggregation:求百分比
      • Stats Aggregation:同时返回avg、max、min、sum、count等
      • Sum Aggregation:求和
      • Top hits Aggregation:求前几
      • Value Count Aggregation:求总数
      • GET /索引库名/_search{"aggs": {"度量名称": {"度量运算": {"field": "运算字段"}}}}例子:{"size": 0,"aggs": {"popular_brand": {"terms": {"field": "make"},        "aggs": {"price_avg": {"avg": {"field": "price"}}}}}}
(0)

相关推荐

  • 〈四〉ElasticSearch的认识:基础原理的补充

    目录 想想我们漏了什么 回顾 补回 集群的建立 集群发现机制 配置文件 健康状态 补充: 小节总结 分片的管理 梳理 分片的均衡分配 主副分片的排斥 容错性: 数据路由 对于集群健康状态的影响 小节总 ...

  • ElasticSearch使用

    前言 Lucene使用起来有点麻烦,其实现在企业中使用原生Lucene来进行搜索的很少了,使用Solr和ElasticSearch比较多,Solr和ElasticSearch都是基于Lucene开发的 ...

  • Python实战案例:flask结合elasticsearch实现全文搜索

    ElasticSearch简称ES,其中Elastic一词通过词典查询获得. 从名字里我们可以知道,ES的特点就在于灵活的搜索,其实ES本身就是一个全文搜索引擎. 一.全文搜索原理 如何实现全文搜索? ...

  • ElasticSearch的学习笔记并整合SpringBoot做测试

    ElasticSearch的学习 简介 ElasticSearch是一个分布式的开源搜索和分析引擎,MySQL专攻于数据的持久化存储与管理(即CRUD),在真正要处理海量数据的检索与分析时,Elast ...

  • 我这里整理了一个关于中药剂量的一个常识的简介,分享给各位朋友。

    关于度量:秦始皇统一六国,统一度量衡,但是通过中医的学习会发现度量衡还是很混乱,半斤八两,那么一两是多少呢?还有论钱论厘的,有的说一小勺,有的说一小杯,有的说一小碗,你怎么弄?我这里整理了一个关于中药 ...

  • 趋势丨蔗糖理想替代品——阿洛酮糖简介

    导语 作为蔗糖的理想替代品,阿洛酮糖是什么?有何特点? 文:中国食品报网丨欣文 图:Stockfood 我们曾分享过一篇关于甜味剂的解读文章,对甜味剂的优点及工业应用进行了介绍,指出世界范围内无糖和低 ...

  • 李默飞个人简介

    易学是我国劳动人民智慧的结晶,是一门古老的学科,自古就充满了无限的神秘,一直是人们不断探索和研究的学科.古往今来有无数名人都在易学上有突出成就,如谷鬼子.诸葛亮.袁天罡等名人.近当代更是涌现出数不胜数 ...

  • 冉龙清老师个人简介

    国际易学联盟副主席 四川易经协会名誉会长 中华易经风水学院常务院长 中国易经协会会员 四川周易研究院副院长 本人于五十年代中期出生于寺庙林立的大巴山中麓,其间多有大贤隐士深隐于此.上小学初中适逢&qu ...

  • 人MTHFR基因多态性检测试剂盒(荧光PCR法)简介

    产品介绍 [注册证编号]:国械注准20173403239 [产品规格]:30人份/盒 [存储条件]:1.-20±3℃避光保存,有效期10个月 2.试剂盒在-16℃~8℃的温度范围内运输,运输时间不超过 ...

  • 迁移学习——入门简介

    一.简介 背景:现如今数据爆炸: 对机器学习模型来说要求快速构建,强泛化 对于数据来说,大部分数据没有标签 所以收集标签数据和从头开始构建一个模型都是代价高昂的,需要对模型和带有标签的数据进行重用 传 ...

  • 馆藏 明代著名画家,传世山水画作及个人生平简介

    明 沈周 纵193.8X横98厘米 台北故宫博物院藏 沈周(1427-1509)吴门四家之首.字启南,号石田,更号白石翁.长州人.世代隐居吴门.他凭借想象描绘庐山为他的老师陈宽作寿.在画法上宗学王蒙, ...

  • 木醋杆菌简介

    醋杆菌属(学名:Acetobacter)是乙酸细菌的一个属,其特点是能够在有空气的条件下将乙醇转化为乙酸.醋酸杆菌属包含有多个种.很多其它的细菌也能在不同的条件下产生乙酸,但醋酸杆菌属中的细菌只在这一 ...

  • SunnyUI 学习1.1——简介与界面布局的使用

    SunnyUI 学习1.1--简介与界面布局的使用 炎黄子孙__ 2021-01-01 14:59:26  3015  收藏 12 分类专栏: SunnyUI C# winform 文章标签: c# ...