关于elasticsearch与kibana、IK分词器

2023-11-10

初识elasticsearch-正向索引和倒排索引

什么是文档和词条?
每一条数据就是一个文档
对文档中的内容分词,得到的词语就是词条

elasticsearch就是面对文档存储的,可以是数据库中的一条商品数据,一个订单信息,文档数据会被反序列化为json格式后存储在elasticsearch中。
什么是正向索引?
基于文档id创建索引。查询词条时必须先找到文档,而后判断是否包含词条

什么是倒排索引?
对文档内容分词,对词条创建索引,并记录词条所在文档信息。查询是现根据词条查询到文档id,而后获取到文档。
例子:id= 1 ,title = 华为小米充电器  id = 2,title = 小米手环
生成词条 文档id = 1 词条term= 华为  文档id = 1,2  词条term= 小米
通过词条查询文档id,在查询到文档

索引(Index):

索引(index):相同类型的文档的集合(有种mysql数据库的表(table)的感觉)
映射(mapping):索引中文档的字段约束信息,类似表的结构约束(类似于表的字段类型约束表结构(schema))
文档(Document):就是一条条的数据,类似数据库中的行(Row),文档都是json格式
字段(Filed):就是JSON文档中的字段,类似数据库中的列(Column)
请求语句(DSL):提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD

区别:mysql擅长事务类型操作,可以确保数据的安全和一致性
     elasticsearch擅长数据的搜索、分析、计算

分词器:

1、分词器作用:
创建倒排索引时对文档分词
用户搜索时,对输入的内容分词
2IK分词器有几种模式:
ik_smart :智能切分,粗粒度
ik_max_word:最细切分,细粒度
3IK分词器如何扩展词条,如何停用词条
利用config目录的ikAnalyzer.cfg.xml文件添加扩展词典和停用词典
在词典中添加扩展词条或者停用词条

索引常见mapping属性:

type:字段数据类型,常见的简单类型有:
字符串:text(可分词的文本)keyword(精确值,例如国家、品牌等不可拆)
数值:long、integer、shortbytedoublefloat、
布尔:boolean
日期:date
对象:object

index:是否创建索引,默认为true
analyzer:使用哪种分词器
properties:该字段的子字段

创建索引库:

es中通过Restful请求操作索引库、文档。请求内容用DSL语句来表示。创建索引库和mapping的DSL语法如下:
PUT /example
{
   "mappings": {
     "properties": {
        "class":{
         "type":"text",
         "analyzer":"ik_smart"
        },
         "cources":{
           "type":"keyword",
           "index":"false"
         },
          "name":{
           "properties":{
             "firstName": {
               "type":"keyword"
               }
              }
             },
           //略
         }}}

查看、删除索引库:

查看索引库:get /索引库名
删除索引库:delete /索引库名
索引库和mapping一旦创建无法修改,但是可以添加新的字段:
put /索引库名/_mapping
{
  "properties": {
    "新字段名":{
      "type":"integer"
      }
     }
  }

文档操作:
添加文档:

新增文档DSL语法:
POST /索引库名/_doc/文档id
{  
    "字段1:"1",
    "字段2":{
    "子属性1":"值2",
    "子属性2":"值3"
   },
   //  ...
}

删除文档的语法:

DELETE /索引库名/_doc/文档id

修改文档
方式一:全量修改,会删除旧文档,添加新文档

PUT /索引库名/_doc/文档id
{  
    "字段1:"1",
    "字段2":{
    "子属性1":"值2",
    "子属性2":"值3"
   },
   //  ...
}

方法二:增量修改,修改指定字段值

POST /索引库名._update/文档id
{  
     "doc": {
       "字段名": "新的值",
       }
 }

RestClient操作索引库:
es提供了各种不同语言的客户端,这些客户端本质就是组装DSL,通过http请求发送给es

创建索引库
private RestHighLevelClient client;
@BeforeEach
void setUp(){
   this.client = new RestHighLevelClient(RestClient.builder(
   				HttpHost.create("http://192.168.0.1:9200")
   				));
   			}
   			
@AfterEach
void tearDown() throws IOException {
   client.close();
   }
   
@Test
void testCreateHotelIndex() throws IOException {
  //1、创建Request对象  (请求路径,索引库名称)
  CreateIndexRequest request = new CreateIndexRequest("hotel");
  //2、请求参数,MAPPING_TEMPLATE是静态常量字符串,内容是创建索引库的DSL语句
  request.source(MAPPING_TEMPLATE,XContentType.JSON);
  //3、发起请求
  client.indices().create(request,RequstOptions.DEFAULT);
  }

删除索引库

@Test
void testDeleteHotelIndex() throws IOException {
  //1、创建Request对象  (请求路径,索引库名称)
  DeleteIndexRequest request = new CreateIndexRequest("hotel");
  GetIndexRequest requestExist = new CreateIndexRequest("hotel");
  //删除索引库
  client.indices().delete(request,RequstOptions.DEFAULT);
  //判断是否存在索引库
   boolean exist = client.indices().exists(requestExist ,RequstOptions.DEFAULT);
  }

RestCient 操作文档:

添加酒店数据到索引库
@Test
void testIndexDocument() throws IOException {
   //1、创建Request对象  (索引库名称,id)
   IndexRequest request = new IndexRequest("indexName").id("1");
   //准备json文档
   request.source("{\"name\":\"Jack\",\"age\":21}".XContentType.JSON);
   //3、发送请求
   client.index(request,RequestOptions.DEFAULT);
 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于elasticsearch与kibana、IK分词器 的相关文章

随机推荐

  • jQuery 事件 - trigger() 方法

    实例
  • SCADA和三大工业控制系统PLC、DCS、FCS

    一 引言 工业控制系统 ICS 是一个通用术语 随着工业技术的快速发展 相继出现了集散控制系统和现场控制系统 涵盖多种类型的控制系统 包括监控和数据采集 SCADA 系统 分布式控制系统 DCS 和其他较小的控制系统配置 如经常在工业部门和
  • 剑指Offer-链表-面试题62:圆圈中最后剩下的数字

    面试题62 圆圈中最后剩下的数字 题目描述 每年六一儿童节 牛客都会准备一些小礼物去看望孤儿院的小朋友 今年亦是如此 HF作为牛客的资深元老 自然也准备了一些小游戏 其中 有个游戏是这样的 首先 让小朋友们围成一个大圈 然后 他随机指定一个
  • 基本操作:vscode-git使用和命令

    1 Git简介 GIt git 是一个开源的分布式版本控制系统 可以有效 高速的处理从很小到很大的项目版本管理 通俗的说 解决的问题是 正常开发 一个团队需要很多人来共同开发一个项目 那么就涉及到代码的合并 比如两个人 同时更改了一处代码
  • Python爬取拉勾网职位 - 分析学历与薪资关系及技能词云

    Python拉勾网职位爬取及数据分析可视化 文章目录 Python拉勾网职位爬取及数据分析可视化 1 工具准备 1 安装第三方库 2 安装及配置Chromedriver无头浏览器 3 谷歌浏览器xpath插件安装及配置 4 使用Pychar
  • 焊接机器人的坡口填充功能_《金属焊接》课后习题参考答案完整版

    金属焊接 课后习题 第1章绪论 1 1 什么是焊接 什么叫做焊接技术 储运11 1 01 丛欣欣 答 焊接 是指通过适当的手段 是两个分离的金属物体 同种金属或异种金属 产生原子 分子 间结合而连接一体的连接方法 焊接技术 焊接是一种重要的
  • HTML期末作业-网上书城网上书店

    HTML期末作业 网上书城网上书店 HTML css JavaScript 7个页面 部分源码
  • 史上最强,Jenkins插件实现多个Job并行后再触发Job详细,一篇贯通...

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • 【面试】数据仓库面试经验总结

    目录 第一部分 自我介绍 第二部分 专业知识细问 第三部分 数据治理 第四部分 开发 代码能力 第五部分 个人性格测试 第一部分 自我介绍 通常面试官会让进行自我介绍 加项目经历介绍 大多数会按简历上的内容逐条细问 回答的时候尽量根据STA
  • VMWare15.5安装CentOS7.9

    一 创建虚拟机 创建虚拟机 选择自定义 高级 点击下一步 选择默认 点击下一步 选择 稍后安装操作系统 点击下一步 选择要安装的操作系统和版本 点击下一步 修改虚拟机名称和安装路径 点击下一步 根据需要设置处理器数量和内核数量 点击下一步
  • 006.设计原则与思想:规范与重构

    规范与重构 一 理论一 什么情况下要重构 到底重构什么 又该如何重构 1 重构的目的 为什么要重构 why 2 重构的对象 到底重构什么 what 3 重构的时机 什么时候重构 when 4 重构的方法 又该如何重构 how 二 理论二 为
  • elasticsearch-分词测试

    分词结果 tokens token 今天天气 start offset 0 end offset 4 type CN WORD position 0 token 今天 start offset 0 end offset 2 type CN
  • Android架构——ViewModel原理学习总结

    本文是楼主学习ViewModel 源码的一些总结 感觉ViewModel的源码是Android 三大架构中 最容易理解的一个了 本文ViewModel基于版本androidx lifecycle lifecycle viewmodel 2
  • Java - 表达数值的字符串(剑指offer)

    请实现一个函数用来判断字符串是否表示数值 包括整数和小数 例如 字符串 100 5e2 123 3 1416 和 1E 16 都表示数值 但是 12e 1a3 14 1 2 3 5 和 12e 4 3 都不是 剑指offer public
  • 100个Python小游戏,上班摸鱼我能玩一整年【附源码】

    哈喽铁子们 表弟最近在学Python 总是跟我抱怨很枯燥无味 其实 他有没有认真想过 可能是自己学习姿势不对 比方说 可以通过打游戏来学编程 今天给大家分享100个Python小游戏 一定要收藏 相关文件代码已上传 文末扫一下名片备注 游戏
  • Kettle实例-缺失值处理-去除缺失值

    1 通过使用Kettle工具 创建一个转换delete missing value 并添加 文本文件输入 控件 字段选择 控件 过滤记录 控件 Excel输出 控件 空操作 什么也不做 控件以及Hop跳连接线 2 单击 浏览 按钮 选择要去
  • 多线程(一):通俗易懂的理解线程和进程

    目录 计算机常识 什么是程序 什么是进程 什么是线程 如果理解线程切换 程序和CPU的常识 线程切换过程 普及几个线程面试题 和以上说过的知识相关 1 单核CPU设定多线程是否有意义 2 工作线程数是不是设置越大越好 3 工作线程数 线程池
  • echarts自定义多根柱子在一起柱状图/条形图

    先看效果 与单一柱状图相比 多柱子的多定义了几个series的值 legend值 注意的是 这东西叫图例标记 是legend下面的参数 看代码 div style width 100 height 240px div
  • 史上最全的java随机数生成算法(转)

    转自 http www zuidaima com share 1585762703215616 htm package com test util import java util Random public class RandomUti
  • 关于elasticsearch与kibana、IK分词器

    初识elasticsearch 正向索引和倒排索引 什么是文档和词条 每一条数据就是一个文档 对文档中的内容分词 得到的词语就是词条 elasticsearch就是面对文档存储的 可以是数据库中的一条商品数据 一个订单信息 文档数据会被反序