elasticsearch入门基本知识+使用案例

1、ES逻辑结构
    索引-index:相当于db中的数据库名。索引命名规则:小写字母。
    类型-type:相当于数据库中的表名,为具有相同字段的文档定义的一个类型。
    字段-field:相当于表字段名,文档数据的属性命名
    映射-mapping:可以设置字段的数据类型、默认值、分析器、是否被索引等规则,是对文档的约束。常见的mapping属性包括:
        type:字段数据类型,常见的简单类型有:
            字符串:text(可分词的文本,与analyzer搭配使用)、keyword(精确值,不可分词,例如:国家名称、ip地址)
            数值:long、integer、short、byte、double、float
            布尔:boolean
            日期:date
            对象:object,嵌套子对象
        index:是否创建索引,默认为true。当设置为false时,该字段不参与搜索
        analyzer:分词器类型,ik_smart 粗粒度分词   ik_max_word 细粒度分词
        properties:嵌套对象的字段定义
    文档-document:相当于表中的一行数据,存在于index/type下面。文档以JSON格式存储,能够被索引
2、拓展ik分词器的词库,只需要修改ik分词器目录中的config/IKAnalyzer.cfg.xml文件:
    去掉无效分词、新增词典设置、
    ik_smart 粗粒度分词   ik_max_word 细粒度分词
3、DSL语法
    创建索引库: PUT /索引库名
        PUT /heima
        {
          "mappings": {
            "properties": {
              "info":{
                "type": "text",
                "index": true,
                "analyzer": "ik_max_word"      //创建分词,建立倒排索引(词根 -> 文档编号)
                "search_analyzer": "pinyin" //搜索分词器,例如按照拼音分词做搜索
              },
              "email":{
                "type": "keyword",
                "index": false
              },
              "name":{
                "type": "object",
                "properties": {
                  "firstName":{
                    "type":"keyword"
                  },
                  "lastName":{
                    "type":"keyword"
                  }
                }
              }
            }
          }
        }
    查询索引库: GET /索引库名
        GET /heima
    删除索引库: 
        DELETE /索引库名
    修改索引库: ES禁止修改索引库原有字段(原有字段可能会带有倒排索引),可以添加新的字段
        PUT /索引库名/_mapping
        {
            "properties" :{
                "新字段名" : {
                    type
                    index
                }
            }
        }
    添加文档:
        POST /索引库名/_doc/文档ID
            POST /heima/_doc/2
            {
              "info": "黑马程序员",
              "email": "1256012967@qq.com",
              "name": {
                "firstName": "maoshun",
                "lastName": "leng"
              }
            }
    
    查询文档:
        GET /索引库名/_doc/文档ID
    删除文档:
        DELETE /索引库名/_doc/文档ID
    修改文档:
        方式一:全量修改文档, PUT /索引名/_doc/文档ID,先删除旧文档,再新增文档。如果旧文档不存在,直接新增
        方式二:增量修改-局部修改文档字段,POST /索引名/_update/文档ID,
            POST /heima/_update/2
            {
              "doc": {
                "email":"lengmaoshun@esunny.cc"
              }
            }
批量导入

数据查询基本语法:
    GET /索引名称/_search
    {
        "query":{
            "查询类型":{
                "查询字段":"条件值"
            }
        }
    }
    查询类型有:
        match_all:查询所有数据,查询条件为空
        full text:全文检索查询,利用分词器对用户输入内容分词,然后去倒排索引库中匹配。查询类型有:
            match:只能对一个字段进行查询
            multi_match:可以对多个字段进行查询,只要有一个字段包含查询值,文档就能被查到。查询查询的字段越多,查询性能越差。可以把多个字段合并到一个字段做查询
        精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期等类型字段,不会对搜索条件分词,精确查询。查询类型有:
            ids
            range:根据值范围查询
            term:根据词条精确值查询
        布尔查询是一个或多个查询子句的组合,子查询的组合方式有:
            must:必须匹配每个子查询,类似 与
            should:选择性匹配子查询,类似 或
            must_node:必须不匹配,不参与算分,类似 非。不参与算分,查询速度快
            filter:必须匹配,不参与算分,过滤出
            
            查询:城市是上海,品种是皇冠假日、华美达,价格大于500,评分大于45的酒店
            GET /hotel/_search
            {
              "query":
              {
               "bool":{
                 "must":[{"term":{"city":"上海"}}],
                 "should":[{"term":{"brand":"皇冠假日"}},{"term":{"brand":"华美达"}}],
                 "must_not":[{ "range":{"price":{ "lte":500 } }}],
                 "filter":[{ "range":{"score":{ "gte":45 } }} 
                }
              }
            }
        分页查询:ES最多只能查询10000条数据
            GET /hotel/_search
            {
                "query" {
                    "查询类型":{
                        "查询字段":"查询值"
                    }
                }
                "from": 0, //分页开始的下标,默认是0
                "size": 10, //每页显示的个数
                "sort":[
                    {"price","asc"}
                ]
            }
        高亮查询:把搜索中的关键字给高亮突出显示出来,不能用match_all。默认搜索字段与高亮字段必须一致才能高亮
            GET /heima/_search
            {
              "query":
              {
               "match": {
                 "info": "黑马"
               }
              },
              "highlight": {
                "fields": {
                  "info": {
                    "pre_tags": "<em>",
                    "post_tags": "</em>"
                  },
                  // 搜索字段与高亮字段不一致也能高亮设置
                  "name.firstName": {
                    "require_field_match": "false"
                  }
                }
              }
            }
        聚合可以实现对文档数据的统计、分析、运算。聚合常见的有三类
            桶(bucket)聚合:对文档分组
            度量(metric)聚合:最大值、最小值、平均值
            管道(pipeline)聚合:对其它聚合的结果再聚合

        分词器分词执行三步骤:
            character filters:在tokenizer之前对文本进行处理。例如删除字符、替换字符
            tokenizer:将文本按照一定的规则切割成词条(term)。例如keyword,就是不分词;还有ik smarttokenizer 
            filter:将tokenizer输出的词条做进一步处理。例如大小写转换、同义词处理、拼音处理等

        同义词分词器:
            PUT /testsyno
            {
              "settings": {
                "analysis": {
                  "analyzer": {
                    "ik_syno_search_analyzer":{  // ik_syno_search_analyzer为自定义分词器名
                      "tokenizer":"ik_max_word",
                      "filter":[
                        "lowercase", //内置filter
                        "ik_syno_filer" //自定义filter
                      ]
                    }
                  },
                  "filter": {
                    "ik_syno_filer":{
                      "type":"synonym_graph",
                      "updateable":true, //开启热加载同义词,当配置文件发生变化时,需要执行POST /testsyno/_reload_search_analyzers加载最新同义词
                      "synonyms_path":"analysis/synonyms.txt"
                    }
                  }
                }
              },
              "mappings": {
                "properties": {
                  "content":{
                    "type": "text",
                    "analyzer": "ik_max_word", //添加文档创建倒排索引时使用到的分词器
                    "search_analyzer": "ik_syno_search_analyzer" // 关键词搜索使用的分词器
                  }
                }
              }
            }

            POST /testsyno/_reload_search_analyzers

            POST /testsyno/_analyze 
            {
              "analyzer": "ik_syno_search_analyzer",
              "text": "HELLO,china"
            }

            POST /testsyno/_doc/1 
            {
              "content":"hello,我的小宝贝"
            }

            POST /testsyno/_doc/2
            {
              "content":"我爱你,中国"
            }

            GET /testsyno/_search 
            {
              "query": {
                "match": {
                  "content": "china"
                }
              }
            }

        
        自动补全分词器: 查询出以用户输入内容开头的词条
            安装拼音分词器:
            自定义分词器:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/764381.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构——带环链表、循环队列问题

1.带环链表问题 1.1给定一个链表判断其是否带环 解决思路&#xff1a;利用快慢指针法&#xff0c;快指针一次走两步慢指针一次走一步&#xff0c;从链表起始位置遍历链表&#xff0c;如果链表带环&#xff0c;则快慢指针一定会在环中相遇&#xff0c;否则快指针先到达链表末尾…

OpenSSH Server 远程代码执行漏洞(CVE-2024-6387)(附代码)

OpenSSH Server 远程代码执行漏洞&#xff08;CVE-2024-6387&#xff09;&#xff08;附代码&#xff09; 前言影响范围验证脚本1.python2.C? 参考链接 前言 2024年7月1日&#xff0c;OpenSSH 官方发布安全通告&#xff0c;披露CVE-2024-6387 OpenSSH Server 远程代码执行漏洞…

【084】基于SpringBoot实现的家乡特色推荐系统

系统介绍 视频演示 点击查看演示视频 基于SpringBoot实现的家乡特色推荐系统主要采用SpringBootVue进行开发&#xff0c;系统整体分为管理员、用户两种角色&#xff0c;主要功能包括首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;文章分类管理&#xff0c;文章分…

鸿蒙开发Ability Kit(程序访问控制):【对所有应用开放】

对所有应用开放 在申请目标权限前&#xff0c;建议开发者先阅读[申请应用权限]&#xff0c;对权限的工作流程有基本了解后&#xff0c;再结合以下权限字段的具体说明&#xff0c;判断应用能否申请目标权限&#xff0c;提高开发效率。 说明&#xff1a; 权限级别为normal的权限…

Sharding-JDBC分库分表的基本使用

前言 传统的小型应用通常一个项目一个数据库&#xff0c;单表的数据量在百万以内&#xff0c;对于数据库的操作不会成为系统性能的瓶颈。但是对于互联网应用&#xff0c;单表的数据量动辄上千万、上亿&#xff0c;此时通过数据库优化、索引优化等手段&#xff0c;对数据库操作…

新手教学系列——【Python开发】不同系统更换pip源的方法

在使用Python进行开发时,你可能会发现使用pip安装包的速度较慢,尤其是在国内进行操作时。为了提高安装速度,我们可以将pip的默认源更换为国内的一些镜像源。本文将详细介绍如何在不同操作系统上进行这一操作,并给出常用的国内镜像源。 为什么要换源 pip默认使用的是官方的…

嵌入式Linux系统编程 — 6.2 signal和 sigaction信号处理函数

目录 1 信号如何处理 2 signal()函数 2.1 signal()函数介绍 2.2 示例程序 3 sigaction()函数 3.1 sigaction()函数介绍 3.2 示例程序 1 信号如何处理 信号通常是发送给对应的进程&#xff0c;当信号到达后&#xff0c; 该进程需要做出相应的处理措施&#xff0c;可以通…

IP地址与电商企业

网购作为我们现代生活不可或缺的部分&#xff0c;现如今电商企业蓬勃发展。 IP地址是网络世界中每一台设备的独特标识符&#xff0c;就像现实世界中每家每户的门牌号。对于电商企业而言&#xff0c;它在很多方面方面发挥着作用。 IP地址能够帮助电商企业精准地确定用户所在的地…

从理论到实践的指南:企业如何建立有效的EHS管理体系?

企业如何建立有效的EHS管理体系&#xff1f;对于任何企业&#xff0c;没有安全就谈不上稳定生产和经济效益&#xff0c;因此建立EHS管理体系是解决企业长期追求的建立安全管理长效机制的最有效手段。良好的体系运转&#xff0c;可以最大限度地减少事故发生。 这篇借着开头这个…

要不要从单片机转Linux?进来看看大神怎么说

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;究竟要不要从单片机转Linu…

对象的引用和常引用

前面曾介绍&#xff1a;一个变量的引用就是变量的别名。实际上&#xff0c;引用是一个指针常量&#xff0c;用来存放该变量的地址。如果形参为变量的引用&#xff0c;实参为变量名&#xff0c;则在调用函数进行虚实结合时&#xff0c;把实参变量的地址传给形参&#xff08;引用…

2024 年江西省研究生数学建模竞赛题目 B题投标中的竞争策略问题---完整文章分享(仅供学习)

问题&#xff1a; 招投标问题是企业运营过程中必须面对的基本问题之一。现有的招投标平台有国家级的&#xff0c;也有地方性的。在招投标过程中&#xff0c;企业需要全面了解招标公告中的相关信息&#xff0c;在遵守招投标各种规范和制度的基础上&#xff0c;选择有效的竞争策…

工业交换机端口统计功能

工业交换机端口统计功能不仅是一项技术手段&#xff0c;更是一双透视企业网络健康状态的慧眼。通过这一功能&#xff0c;企业能够实时捕捉到网络中每一个端口的流量情况&#xff0c;这不仅仅是数据的积累&#xff0c;更是对网络脉搏的精准把握。当网络的每一个脉动都被记录在案…

【每日一练】Python遍历循环

1. 情节描述&#xff1a;上公交车(10个座位)&#xff0c;并且有座位就可以坐下 要求&#xff1a;输入公交卡当前的余额&#xff0c;只要超过2元&#xff0c;就可以上公交车&#xff1b;如果车上有空座位&#xff0c;才可以上。 seat 10 while seat > 0:money int(input(…

springboot个人证书管理系统-计算机毕业设计源码16679

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了个人证书管理系统的开发全过程。通过分析个人证书管理系统管理的不足&#xff0c;创建了一个计算机管理个人证书管理系统的方案。文章介绍了个人证书管理系统的系…

计算机组成原理 | CPU子系统(4)MIPS32架构-单周期处理器设计

R型运算指令通路 I型运算指令通路 I型访存指令数据通路 I型分支 J型j指令 重新布局 继续整合通路&#xff1a;MUX多路选择器 控制方式 硬连接控制方式&#xff1a;依靠电路 微命令控制&#xff1a;将指令转换为微命令 控制信号的整理和编码 控制系统的两级控制方案 ALU控制器&…

大模型时代的基础架构,大模型算力中心建设指南重磅来袭!

什么是最畅销商品&#xff1f;什么是高毛利商品&#xff1f; 我们来看一个例子&#xff1a; 一件T恤使用成本为100元的原料&#xff0c;价格为140元。另一件T恤使用成本为80元的原料&#xff0c;但在样式、颜色、图案的设计上比较有特色&#xff0c;价格也为140元。 当这两件…

【BES2500x系列 -- RTX5操作系统】深入探索CMSIS-RTOS RTX -- 同步与通信篇 -- 消息队列和邮箱处理 --(四)

&#x1f48c; 所属专栏&#xff1a;【BES2500x系列】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f49…

面向航天器大数据安全传输的发布/订阅系统设计

源自&#xff1a;系统工程与电子技术 作者&#xff1a;覃润楠 彭晓东 谢文明 惠建江 冯渭春 姜加红 注&#xff1a;若出现无法显示完全的情况&#xff0c;可 V 搜索“人工智能技术与咨询”查看完整文章 摘 要 针对航天器试验任务过程监控的在轨故障诊断状态检测、健…

5款简洁干净,功能强悍,专注实用的软件

​ 电脑上的各类软件有很多&#xff0c;除了那些常见的大众化软件&#xff0c;还有很多不为人知的小众软件&#xff0c;专注于实用功能&#xff0c;简洁干净、功能强悍。 1.音量控制利器——EarTrumpet ​ EarTrumpet是一款专为Windows用户设计的音量控制软件。它允许用户轻松…