热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Elastic之elasticsearch基本操作

一、基本概念

一、基本概念


Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的。

对比关系:

索引(indices)----------------------Databases 数据库
  类型(type)--------------------------Table 数据表 [7.x废弃]
    文档(Document)----------------------Row 行
        字段(Field)-------------------------Columns 列


要注意的是:Elasticsearch本身就是分布式的,因此即便你只有一个节点,Elasticsearch默认也会对你的数据进行分片和副本操作,当你向集群添加新数据时,数据也会在新加入的节点中进行平衡。


二、索引操作


1. 查询索引


查看es中有哪些索引库(类似mysql数据库):GET /_cat/indices?v

# es默认对中文的分词 支持不友好,它认为一个字代表一个词
# 查看es的分词方式
GET _analyze
{"text": ["我是中国人"]
}
{"text": "我爱你你爱我"
}# 给es配置中文分词器:ik分词器
# 指定ik分词器分词:ik_smart粗粒度分词
# ik_max_word细粒度分词
GET _analyze
{"text": "咖喱人,鸡你太美,你这个老六","analyzer": "ik_max_word"
}

es 中会默认存在一个名为.kibana和.kibana_task_manager的索引


字段名含义说明
health

green(集群完整)

yellow(单点正常、集群不完整)

red(单点不正常)

status是否能使用
index索引名
uuid索引统一编号
pri主节点几个
rep从节点几个
docs.count文档数
docs.deleted文档被删了多少
store.size整体占空间大小
pri.store.size主节点占

2. 创建索引

PUT /索引名

参数可选:指定分片及副本,默认分片为3,副本为2。

PUT /liush
{"settings": {"number_of_shards": 2,"number_of_replicas": 3}
}

3. 查看索引具体信息


GET /索引名

4. 删除索引


DELETE /索引库名

三、映射配置(_mapping)


索引有了,接下来肯定是添加数据。但是,在添加数据之前必须定义映射。

什么是映射?

映射是定义文档的过程,文档包含哪些字段,这些字段是否保存,是否索引,是否分词等

只有配置清楚,Elasticsearch才会帮我们进行索引库的创建(不一定)


1. 创建映射字段


PUT /索引库名/_mapping
{
  "properties": {
    "字段名": {
      "type": "类型",
      "index": true,
      "store": true,
      "analyzer": "分词器"
    }
  }
}

字段名:类似于列名,properties下可以指定许多字段。

每个字段可以有很多属性。例如:

  • type:类型,String(text keyword) Numeric(long integer float double) date boolean

  • index:是否索引,默认为true

  • store:是否存储,默认为false,即使为false也会存储到_source中,如果为true则会额外存储一份

  • analyzer:分词器,这里使用ik分词器:ik_max_word或者ik_smart


PUT /liush
{"settings": {"number_of_shards": 2,"number_of_replicas": 3}
}POST /liush/_mapping
{"properties": {"title": {"type": "text","analyzer": "ik_max_word"},"images":{"type": "keyword","index": "false"},"price": {"type": "long"}}
}

2. 查看映射关系


语法:GET /索引库名/_mapping

四、新增文档(document)


有了索引、类型和映射,就可以对文档做增删改查操作了。


1. 基本玩法


如果我们想要自己新增的时候指定id,可以这么做:

POST /索引库名/_doc/id值
{
    ...
}

POST /liush/_doc/1
{"title": "小米手机","images": "http://xiaomi.com/xiaomi.igp","price":2999
}GET /liush/_search

2. 智能判断


事实上Elasticsearch非常智能,你不需要给索引库设置任何mapping映射,它也可以根据你输入的数据来判断类型,动态添加数据映射。

POST /liush/_doc/2
{"title":"小米手机","images":"http://image.jd.com/12479122.jpg","price":2899,"stock": 200,"saleable":true,"attr": {"category": "手机","brand": "小米"}
}

我们额外添加了stock库存,saleable是否上架,attr其他属性几个字段。 

stock,saleable,attr都被成功映射了。

如果是字符串类型的数据,会添加两种类型:text + keyword。如上例中的category 和 brand


五、删除数据


删除使用DELETE请求,同样,需要根据id进行删除:


语法:DELETE /索引库名/_doc/id值
示例:DELETE /liush/_doc/2


六、更新文档


语法:
POST /索引库名/_update/id值
{
    doc:{
        "属性":"值"
    }
}

POST /liush/_update/1
{"doc": {"title":"aaa"}
}


推荐阅读
  • SQLite是一种轻量级的关系型数据库管理系统,尽管体积小巧,却能支持高达2TB的数据库容量,每个数据库以单个文件形式存储。本文将详细介绍SQLite在Android开发中的应用,包括其数据存储机制、事务处理方式及数据类型的动态特性。 ... [详细]
  • 本文详细介绍如何在Spring Boot项目中集成和使用JPA,涵盖JPA的基本概念、Spring Data JPA的功能以及具体的操作步骤,帮助开发者快速掌握这一强大的持久化技术。 ... [详细]
  • 拖拉切割直线 ... [详细]
  • 本文介绍了一种算法,用于在一个给定的二叉树中找到一个节点,该节点的子树包含最大数量的值小于该节点的节点。如果存在多个符合条件的节点,可以选择任意一个。 ... [详细]
  • 设计模式系列-原型模式
    一、上篇回顾上篇创建者模式中,我们主要讲述了创建者的几类实现方案,和创建者模式的应用的场景和特点,创建者模式适合创建复杂的对象,并且这些对象的每个组成部分的详细创建步骤可以是动态的变化的,但 ... [详细]
  • 本文探讨了SQLAlchemy ORM框架中如何利用外键和关系(relationship)来建立表间联系,简化复杂的查询操作。通过示例代码详细解释了relationship的定义、使用方法及其与外键的相互作用。 ... [详细]
  • MVC框架下使用DataGrid实现时间筛选与枚举填充
    本文介绍如何在ASP.NET MVC项目中利用DataGrid组件增强搜索功能,具体包括使用jQuery UI的DatePicker插件添加时间筛选条件,并通过枚举数据填充下拉列表。 ... [详细]
  • 深入解析Android Activity生命周期
    本文详细探讨了Android中Activity的生命周期,通过实例代码和详细的步骤说明,帮助开发者更好地理解和掌握Activity各个阶段的行为。 ... [详细]
  • 字符、字符串和文本的处理之Char类型
    .NetFramework中处理字符和字符串的主要有以下这么几个类:(1)、System.Char类一基础字符串处理类(2)、System.String类一处理不可变的字符串(一经 ... [详细]
  • 本文介绍了JSP的基本概念、常用标签及其功能,并通过示例详细说明了如何在JSP页面中使用Java代码。 ... [详细]
  • 本文详细介绍了Keycloak框架中UserRepresentation类下的isEnabled()方法的功能与应用,并通过多个实际代码示例说明其在用户管理中的具体实现。 ... [详细]
  • 本文详细介绍了如何使用 HTML 和 CSS 实现一个具有动画效果的手风琴组件,包括代码示例和实现原理。 ... [详细]
  • 抽象工厂模式 c++
    抽象工厂模式包含如下角色:AbstractFactory:抽象工厂ConcreteFactory:具体工厂AbstractProduct:抽象产品Product:具体产品https ... [详细]
  • 本文探讨了在Node.js环境中如何有效地捕获标准输出(stdout)的内容,并将其存储到变量中。通过具体的示例和解决方案,帮助开发者解决常见的输出捕获问题。 ... [详细]
  • 本文档提供了详细的MySQL安装步骤,包括解压安装文件、选择安装类型、配置MySQL服务以及设置管理员密码等关键环节,帮助用户顺利完成MySQL的安装。 ... [详细]
author-avatar
平凡无琦世界
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有