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.mzph.cn/news/864709.shtml

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

相关文章

【Llama 2的使用方法】

Llama 2是Meta AI&#xff08;Facebook的母公司Meta的AI部门&#xff09;开发并开源的大型语言模型系列之一。Llama 2是在其前身Llama模型的基础上进行改进和扩展的&#xff0c;旨在提供更强大的自然语言处理能力和更广泛的应用场景。 以下是Llama 2的一些关键特性和更新点&am…

git主机仓库地址迁移后 git提交代码报错

找到本地电脑的文件known_hosts 2.在代码中git pull 此时终端会有提示 输入ye enter提交便成功了

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

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

豪掷5400亿,SK海力士加码部署AI赛道

KlipC报道&#xff1a;最新数据显示&#xff0c;韩国6月半导体出口额达到134亿美元&#xff08;约合人民币973亿元&#xff09;&#xff0c;同比增长50.9%。 KlipC分析师表示&#xff0c;这一数据超出市场预期&#xff0c;对于全球半导体产业链来说&#xff0c;是一则利好的消…

2024年【四川省安全员A证】试题及解析及四川省安全员A证模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 四川省安全员A证试题及解析根据新四川省安全员A证考试大纲要求&#xff0c;安全生产模拟考试一点通将四川省安全员A证模拟考试试题进行汇编&#xff0c;组成一套四川省安全员A证全真模拟考试试题&#xff0c;学员可通…

前后端数据交互流程

一、前言 用户在浏览器访问一个网站时&#xff0c;会有前后端数据交互的过程&#xff0c;前后端数据交互也有几种的情况&#xff0c;一下就简单的来说明一下 二、原理 介绍前后端交互前先来了解一下浏览器的功能&#xff0c;浏览器通过渲染引擎和 JavaScript 引擎协同工作&am…

简明万年历编制(C语言)

简明万年历编制&#xff08;C语言 &#xff09; 编制万年历的要素&#xff1a; 农历公历对照&#xff0c;显示星期&#xff0c;农历干支年&#xff0c;当年生肖&#xff0c;国定节假日&#xff0c;寒天九九&#xff0c;暑日三伏&#xff0c;入梅出梅&#xff0c;节气时间&#…

剑神诀_单机架设_无需虚拟机_小白专用

前言 今天给大家带来一款单机游戏的架设&#xff1a;剑神诀&#xff0c;一键端 无需虚拟机 如今市面上的资源参差不齐&#xff0c;大部分的都不能运行&#xff0c;本人亲自测试&#xff0c;运行视频如下&#xff1a; 剑神诀 搭建教程 此游戏架设不需要安装虚拟机&#xff0c;…

单模光纤(SMF)市场规模不断增长 非色散位移单模光纤为其代表产品

单模光纤&#xff08;SMF&#xff09;市场规模不断增长 非色散位移单模光纤为其代表产品 单模光纤&#xff08;SMF&#xff09;指芯径为8-10微米&#xff0c;用于单一传输模式的光纤。单模光纤具有频带宽、芯径细、适合长距离传输、传输耗损低、抗干扰能力强、传输速度快等优势…

MySQL实训项目——餐饮点餐系统

项目简介&#xff1a;餐饮点餐系统是一款为餐厅和顾客提供便捷点餐服务的在线平台。通过该系统&#xff0c;餐厅能够展示其菜单&#xff0c;顾客可以浏览菜品&#xff0c;并将其加入购物车或直接下单。系统还提供了订单管理功能&#xff0c;方便餐厅跟踪和处理顾客的订单。 1. …

【计算机网络】传输层(作业)

1、OSI参考模型中&#xff0c;提供端到端的透明数据传输服务、差错控制和流量控制的层是&#xff08;C&#xff09;。 A. 物理层B. 网络层C. 运输层D. 会话层 2、运输层为&#xff08;B&#xff09;之间提供逻辑通信。 A. 主机B. 进程C. 路由器D. 操作系统 3、运输层面向连接…

RT-Thread Studio与CubeMX联合编程之rtthread stm32h743的使用(十一)spi设备SFUD驱动的使用

我们要在rtthread studio 开发环境中建立stm32h743xih6芯片的工程。我们使用一块stm32h743及fpga的核心板完成相关实验&#xff0c;核心板如图&#xff1a; 1.建立新工程&#xff0c;选择相应的芯片型号及debug引脚及调试器 2.编译下载&#xff0c;可以看到串口打印正常 3.…

Hubstudio指纹浏览器:海外代理IP新选择,IPXProxy为何备受推崇?

许多人都会把Hubstudio指纹浏览器和代理IP进行搭配使用&#xff0c;为了保证网络操作的顺利进行&#xff0c;例如亚马逊的多账号管理。那有没有好用的海外代理IP呢&#xff0c;如何在Hubstudio指纹浏览器中使用代理IP呢&#xff1f; 下面就给大家推荐好用的一家海外IP代理&…

积鼎CFD:基于Virtualflow在溃坝洪水演进数值仿真分析

近期&#xff0c;多地遭受了前所未有的洪水侵袭&#xff0c;每一次灾害都如同警钟长鸣&#xff0c;提醒我们水库大坝安全的重要性&#xff0c;超标准暴雨的突袭让大坝的安全防线面临前所未有的考验。面对这一挑战&#xff0c;CFD技术可为溃坝洪水的预测与管理开辟新的路径。凭借…

vue根据文字长短展示跑马灯效果

介绍 为大家介绍一个我编写的vue组件 auto-marquee &#xff0c;他可以根据要展示文本是否超出展示区域&#xff0c;来判断是否使用跑马灯效果&#xff0c;效果图如下所示 假设要展示区域的宽度为500px&#xff0c;当要展示文本的长度小于500px时&#xff0c;只会展示文本&…

如何借助物联网实现农情监测与预警

如何借助物联网实现农情监测与预警&#xff1f; 物联网技术&#xff0c;作为信息技术与传统行业的深度融合产物&#xff0c;正逐步变革着农业生产的管理模式&#xff0c;特别是在农情监测与预警领域展现出巨大潜力。其核心在于通过感知层的各类传感器、通信层的数据传输技术以…

高编:线程

一、pthread 线程 优点&#xff1a; 比多进程节省资源&#xff0c;可以共享变量。 概念&#xff1a; 线程是轻量级进程&#xff0c;一般是一个进程中的多个任务。进程是系统中最小的资源分配单位.线程是系统中最小的执行单位 特征&#xff1a; 1、共享资源 2、效率高 …

qt可点击的QLabel

需求——问题与思路 使用wpf实现一个可点击的超链接label相当简单&#xff08;如下图&#xff09;&#xff0c;但是qt的QLabel不会响应点击事件&#xff0c;那就从QLabel继承一个类&#xff0c;然后在该类中重写mousePressEvent函数&#xff0c;并在该函数中对左键点击事件做响…

应对SQL注入攻击:保障网站安全的策略

在互联网的广阔天地中&#xff0c;网站安全始终是站长用户和企业开发者不可忽视的重要议题。其中&#xff0c;SQL注入攻击作为一种常见的网络攻击手段&#xff0c;严重威胁着网站的数据安全和业务稳定。什么是SQL注入攻击&#xff0c;我们该如何应对这种攻击呢&#xff1f;今天…