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.rhkb.cn/news/369303.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络(2

计算机网络续 一. 网络编程 网络编程, 指网络上的主机, 通过不同的进程, 以编程的方式实现网络通信(或网络数据传输). 即便是同一个主机, 只要不同进程, 基于网络来传输数据, 也属于网络编程. 二. 网络编程套接字(socket) socket: 操作系统提供的网络编程的 API 称作 “soc…

【数据结构与算法】堆排序算法原理与实现:基于堆实现的高效排序算法

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​ 目录 一、引言 堆排序的简介 堆排序的特点 二、堆的概念 三、堆排序算法的原理 四、堆…

软件测试面试1000问(含答案)

1、自动化代码中,用到了哪些设计模式? 单例设计模式工厂模式PO设计模式数据驱动模式面向接口编程设计模式 2、什么是断言( Assert) ? 断言Assert用于在代码中验证实际结果是不是符合预期结果&#xff0c;如果测试用例执行失败会抛出异常并提供断言日志 3、什么是web自动化…

数据结构预科

在堆区申请两个长度为32的空间&#xff0c;实现两个字符串的比较【非库函数实现】 要求&#xff1a; 1> 定义函数&#xff0c;在对区申请空间&#xff0c;两个申请&#xff0c;主函数需要调用2次 2> 定义函数&#xff0c;实现字符串的输入&#xff0c;void input(char …

Jenkins容器的部署

本文主要是记录如何在Centos7上安装docker,以及在docker里面配置tomcat、mysql、jenkins等环境。 一、安装docker 1.1 准备工作 centos7、VMware17Pro 1.2 通过yum在线安装dokcer yum -y install docker1.3 启动docker服务 systemctl start docker.service1.4 查看docke…

Java传引用问题

本文将介绍 Java 中的引用传递&#xff0c;包括其定义、实现方式、通过引用修改原来指向的内容和通过引用修改当前引用的指向的区别 目录 1、引用传递的概念 2、引用传递的实现方式 3、传引用会发生的两种情况&#xff1a; 通过引用修改当前引用的指向 通过引用修改原来指…

《数据仓库与数据挖掘》 总复习

试卷组成 第一章图 第二章图 第三章图 第四章图 第五章图 第六章图 第九章图 第一章 DW与DM概述 &#xff08;特点、特性&#xff09; DB到DW 主要特征 &#xff08;1&#xff09;数据太多&#xff0c;信息贫乏&#xff08;Data Rich&#xff0c; Information Poor)。 &a…

H2 Database Console未授权访问漏洞封堵

背景 H2 Database Console未授权访问&#xff0c;默认情况下自动创建不存在的数据库&#xff0c;从而导致未授权访问。各种未授权访问的教程&#xff0c;但是它怎么封堵呢&#xff1f; -ifExists 很简单&#xff0c;启动参数添加 -ifExists &#xff0c;它的含义&#xff1a…

【机器学习】机器学习的重要方法——线性回归算法深度探索与未来展望

欢迎来到 破晓的历程博客 引言 在数据科学日益重要的今天&#xff0c;线性回归算法以其简单、直观和强大的预测能力&#xff0c;成为了众多领域中的基础工具。本文将详细介绍线性回归的基本概念、核心算法&#xff0c;并通过五个具体的使用示例来展示其应用&#xff0c;同时探…

CASS7.0按方向和距离绘制图形

1、绘制工具 2、按方向和距离绘制 &#xff08;1&#xff09;切换方向 &#xff08;2&#xff09;距离输入

Python函数缺省参数的 “ 坑 ” (与C++对比学习)

我们都知道Python函数的缺省参数可以降低我们调用函数的成本&#xff0c;但是一般我们的缺省参数都是不可变对象&#xff0c;如果是可变对象&#xff0c;我们对其多次调用会发生什么呢&#xff1f; def func(arr[]):arr.append(Hello)print(arr)func() func() func() 这貌似…

MongoDB-社区版-本地安装

系统&#xff1a;win10 1. 下载server:Download MongoDB Community Server | MongoDB 我选的zip包 2. 下载shell&#xff1a;MongoDB Shell Download | MongoDB 我选的zip包 3. 启动server 4. 启动shell, 完成

MYSQL函数进阶详解:案例解析(第19天)

系列文章目录 一、MySQL的函数&#xff08;重点&#xff09; 二、MySQL的窗口函数&#xff08;重点&#xff09; 三、MySQL的视图&#xff08;熟悉&#xff09; 四、MySQL的事务&#xff08;熟悉&#xff09; 文章目录 系列文章目录前言一、MySQL的函数1. 聚合函数2. group_c…

Redis 多数据源自定义配置 Spring Boot 升级版

文章目录 1.前言2.git 示例地址3.需求4.代码实现4.1 application.properties 配置文件4.2 获取 application.properties 中的 redis 配置4.2.1 Environment 对象来获取自定义 redis 配置 4.3 初始化 RedisTemplate 对象&#xff0c;并注册到 Spring IOC 容器4.3.1 初始化方法4.…

spring boot (shiro)+ websocket测试连接不上的简单检测处理

1、用前端连接测试的demo一切正常&#xff0c;但是到了项目中连接不上了 一开始以为是地址错&#xff0c;但是换了apifox测试也是不可以。 2、考虑是shiro进行了拦截了&#xff0c;所以就访问不到了地址&#xff0c;那么就放行。 3、再次用apifox测试&#xff0c;成功了。 当然…

马拉松报名小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;赛事信息管理&#xff0c;赛事报名管理&#xff0c;活动商城管理&#xff0c;留言板管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;赛事信息&…

C++:智能指针

目录 前言 1.内存泄漏及其危害 2.内存泄漏分类&#xff1a; 3.如何检测内存泄漏 4.如何避免内存泄漏 一、为什么需要智能指针&#xff1f; 二、智能指针的使用及其原理 1.RAII 2.智能指针 3.std::auto_ptr 4.std::unique_ptr 5.std::shared_ptr 6.std::weak_ptr…

SA 注册流程

目录 1. UE开机后按照3GPP TS 38.104定义的Synchronization Raster搜索特定频点 2.UE尝试检测PSS/SSS&#xff0c;取得下行时钟同步&#xff0c;并获取小区的PCI&#xff1b;如果失败则转步骤1搜索下一个频点&#xff1b;否则继续后续步骤&#xff1b; 3.解析Mib&#xff0c;…

从0到1构建渠道运营体系:实战案例与策略指南

引言 在当今竞争激烈的市场环境中&#xff0c;有效的渠道运营是企业实现产品或服务快速触达目标用户、提升市场份额的关键。从零开始构建一个高效的渠道运营体系&#xff0c;不仅需要深思熟虑的策略规划&#xff0c;还需要灵活应变的实战操作。本文将结合实战案例&#xff0c;…

JDK新特性之协程

在 JVM 中&#xff0c;java 线程直接映射内核线程&#xff0c;因此 java 线程的创建、销毁和调度都要依赖内核态的操作&#xff08;系统调用&#xff09;。而协程是真正的用户线程&#xff0c;如上图所示很多的协程可以映射很少的几个内核线程&#xff0c;并且协程的创建、销毁…