本篇所有操作都在 Kibana 上执行

创建第一个索引

PUT product
{
// 索引设置
"settings": {
// 分片数量
"number_of_shards": 3,
// 副本数量
"number_of_replicas": 1
},
// 索引字段映射
"mappings": {
// 字段属性
"properties": {
// 商品名称
"name":{
// 字段类型为文本
"type":"text"
},
// 商品标签
"label":{
"type":"keyword"
},
"price":{
"type": "scaled_float",
// 比例因子设置为100 在ES中会按分存储
// 注意:scaling_factor属性是只针对scaled_float这个数据类型才有
"scaling_factor": 100
},
// 商品状态
"status":{
"type":"integer"
},
// 创建日期
"create_date":{
"type":"date"
}
}
}
}

执行命令,我们会得到如下返回信息,表示创建成功

{
"acknowledged": true,
"shards_acknowledged": true,
"index": "product"
}

查看指定索引结构

获取索引全部信息:

## 命令格式  GET {索引名称}
GET product

返回结果:

{
"product": {
"aliases": {},
"mappings": {
"properties": {
"create_date": {
"type": "date"
},
"label": {
"type": "keyword"
},
"name": {
"type": "text"
},
"price": {
"type": "scaled_float",
"scaling_factor": 100
},
"status": {
"type": "integer"
}
}
},
"settings": {
"index": {
"routing": {
"allocation": {
"include": {
"_tier_preference": "data_content"
}
}
},
"number_of_shards": "3",
"provided_name": "product",
"creation_date": "1693981437123",
"number_of_replicas": "1",
"uuid": "awfrhothQaeoL2bHvufN5w",
"version": {
"created": "8090199"
}
}
}
}
}

查看索引 Mapping 信息

GET product/_mapping

返回结果:

{
"product": {
"mappings": {
"properties": {
"create_date": {
"type": "date"
},
"label": {
"type": "keyword"
},
"name": {
"type": "text"
},
"price": {
"type": "scaled_float",
"scaling_factor": 100
},
"status": {
"type": "integer"
}
}
}
}
}

查看索引 settings 信息

GET product/_settings

返回结果:

{
"product": {
"settings": {
"index": {
"routing": {
"allocation": {
"include": {
"_tier_preference": "data_content"
}
}
},
"number_of_shards": "3",
"provided_name": "product",
"creation_date": "1693981437123",
"number_of_replicas": "1",
"uuid": "awfrhothQaeoL2bHvufN5w",
"version": {
"created": "8090199"
}
}
}
}

查看索引 aliases 信息

GET product/_alias

返回结果:

{
"product": {
"aliases": {}
}
}

目前我们没设置别名,所以返回为空

新增索引数据--文档

单个新增

语法:

PUT {索引名}/_doc/{文档id}
{
{字段名}:{字段值/]
}

实例:

PUT product/_doc/1
{
"name":"篮球",
"label":["运动","球类"],
"price":33.5,
"status":0,
"create_date":"2023-08-08T13:00:00"
}

执行成功将返回:

{
"_index": "product",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}

批量新增

语法:

POST _bulk
{ action: { metadata }}
{ request body }
{ action: { metadata }}
{ request body }

注:bulk对 JSON 串的有着严格的要求。每个 JSON 串不能换行,只能放在同一行,同时,相邻的 JSON 串之间必须要有换行(delete语法除外).

实例:

POST _bulk
{"create":{"_index":"product","_id":2}}
{"name":"足球","label":["运动","球类"],"price":60.3,"status":0,"create_date":"2023-08-09T13:00:00"}
{"create":{"_index":"product","_id":3}}
{"name":"华为手机","label":["数码","手机"],"price":6999,"status":0,"create_date":"2023-08-31T13:00:00"}
{"create":{"_index":"product","_id":4}}
{"name":"苹果","label":["数码","手机"],"price":9999,"status":1,"create_date":"2023-08-31T13:00:00"}

返回结果:

{
"took": 6,
"errors": false,
"items": [
{
"create": {
"_index": "product",
"_id": "2",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1,
"status": 201
}
},
{
"create": {
"_index": "product",
"_id": "3",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 1,
"_primary_term": 1,
"status": 201
}
},
{
"create": {
"_index": "product",
"_id": "4",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 2,
"_primary_term": 1,
"status": 201
}
}
]
}

查询索引数据--文档

查询所有

GET product/_search
{
"query": {
"match_all": {}
}
}

返回

{
"took": 9,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 4,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "product",
"_id": "2",
"_score": 1,
"_source": {
"name": "足球",
"label": [
"运动",
"球类"
],
"price": 60.3,
"status": 0,
"create_date": "2023-08-09T13:00:00"
}
},
{
"_index": "product",
"_id": "3",
"_score": 1,
"_source": {
"name": "华为手机",
"label": [
"数码",
"手机"
],
"price": 6999,
"status": 0,
"create_date": "2023-08-31T13:00:00"
}
},
{
"_index": "product",
"_id": "4",
"_score": 1,
"_source": {
"name": "苹果手机",
"label": [
"数码",
"手机"
],
"price": 9999,
"status": 1,
"create_date": "2023-09-01T13:00:00"
}
},
{
"_index": "product",
"_id": "1",
"_score": 1,
"_source": {
"name": "篮球",
"label": [
"运动",
"球类"
],
"price": 33.5,
"status": 0,
"create_date": "2023-08-08T13:00:00"
}
}
]
}
}

响应的数据结果分为两部分:

{
----------------first part:分片副本信息--------------------
"took": 9,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
---------------second part:查询的数据集---------------------
"hits": {
"total": {
"value": 4,
"relation": "eq"
},
"max_score": 1,
"hits": [{}]
}
}

查询标签带手机的商品

GET product/_search
{
"query": {
"match": {
"label": "手机"
}
}
}

返回:

{
"took": 4,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 2,
"relation": "eq"
},
"max_score": 0.5908618,
"hits": [
{
"_index": "product",
"_id": "3",
"_score": 0.5908618,
"_source": {
"name": "华为手机",
"label": [
"数码",
"手机"
],
"price": 6999,
"status": 0,
"create_date": "2023-08-31T13:00:00"
}
},
{
"_index": "product",
"_id": "4",
"_score": 0.5908618,
"_source": {
"name": "苹果手机",
"label": [
"数码",
"手机"
],
"price": 9999,
"status": 1,
"create_date": "2023-09-01T13:00:00"
}
}
]
}
}

过滤状态为0的

GET product/_search
{
"query": {
"bool": {
"must": {
"match": {
"label": "手机"
}
},
"filter": {
"term": {
"status": 0
}
}
}
}
}

返回结果:

{
"took": 0,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.5908618,
"hits": [
{
"_index": "product",
"_id": "3",
"_score": 0.5908618,
"_source": {
"name": "华为手机",
"label": [
"数码",
"手机"
],
"price": 6999,
"status": 0,
"create_date": "2023-08-31T13:00:00"
}
}
]
}
}

查询结果里面都有一个 _score字段,一般 Elasticsearch 根据相关评分排序,相关评分是根据文档与语句的匹配度来得出, _score值越高说明匹配度越高。相关性(relevance)概念在Elasticsearch中非常重要,而这也是它与传统关系型数据库中记录只有匹配和不匹配概念最大的不同。

Elasticsearch之索引简单应用的更多相关文章

  1. ElasticSearch+Kibana 索引操作

    ElasticSearch+Kibana 索引操作 一 前言 ElasticiSearch 简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引 ...

  2. 《读书报告 -- Elasticsearch入门 》--简单使用(2)

    <读书报告 – Elasticsearch入门 > ' 第四章 分布式文件存储 这章的主要内容是理解数据如何在分布式系统中存储. 4.1 路由文档到分片 创建一个新文档时,它是如何确定应该 ...

  3. ELK学习笔记之ElasticSearch的索引详解

    0x00 ElasticSearch的索引和MySQL的索引方式对比 Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤.特别是它对多条件的过滤支持非常好,比如年龄 ...

  4. Spring Boot + Elasticsearch 实现索引的日常维护

    全文检索的应用越来越广泛,几乎成了互联网应用的标配,商品搜索.日志分析.历史数据归档等等,各种场景都会涉及到大批量的数据,在全文检索方面,方案无外乎Lucene.Solr.Elasticsearch三 ...

  5. Spring Boot + Elasticsearch 实现索引批量写入

    在使用Eleasticsearch进行索引维护的过程中,如果你的应用场景需要频繁的大批量的索引写入,再使用上篇中提到的维护方法的话显然效率是低下的,此时推荐使用bulkIndex来提升效率.批写入数据 ...

  6. lucene创建索引简单示例

    利用空闲时间写了一个使用lucene创建索引简单示例, 1.使用maven创建的项目 2.需要用到的jar如下: 废话不多说,直接贴代码如下: 1.创建索引的类(HelloLucene): packa ...

  7. ES 10 - Elasticsearch的索引别名和索引模板

    目录 1 索引模板概述 1.1 什么是索引模板 1.2 索引模板中的内容 1.3 索引模板的用途 2 创建索引模板 3 查看索引模板 4 删除索引模板 5 模板的使用建议 5.1 一个index中不能 ...

  8. elasticsearch的索引操作和文档操作总结

    参考文档:https://es.xiaoleilu.com/010_Intro/00_README.html 一.索引操作 1.查看当前节点的所有的index 查看当前节点的所有的index [roo ...

  9. elasticsearch的索引自动清理及自定义清理

    近发现elasticsearch近期索引文件大的吓人,清理了下之前的索引文件,发现服务器性能大大的减轻了一半,想一直保留近一个月的索引文件,但是又不想每个月手动清楚,在此写了一个小脚本 查询索引: c ...

  10. elasticsearch删除索引报错【原】

    如果elasticsearch删除索引报错 curl -X DELETE 'http://10.73.26.66:9200/httpd-34-2017.08.15' {"error" ...

随机推荐

  1. drf——5个视图扩展类、9个视图子类、视图集、drf之路由

    5个视图扩展类 # 写5个类(不叫视图类 视图拓展类 需要配合GenericAPIView一起用) 每个类有一个方法 以后想写哪个接口 就继承哪个类即可 from rest_framework.res ...

  2. Android Studio格式化代码

    有时候代码写来老师乱七八糟,手动格式化讷太浪费时间,且格式化不公正,最后当然使用ide自带的快捷键了 找到导航中的Code 下的 Reformat Code ; 看提示知道使用快捷键 就是Ctrl + ...

  3. 代码随想录算法训练营Day24 回溯算法|216.组合总和III 17.电话号码的字母组合

    代码随想录算法训练营 216.组合总和III 题目链接:216.组合总和III 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. 说 ...

  4. 如何让Task在非线程池线程中执行?

    Task承载的操作需要被调度才能被执行,由于.NET默认采用基于线程池的调度器,所以Task默认在线程池线程中执行.但是有的操作并不适合使用线程池,比如我们在一个ASP.NET Core应用中承载了一 ...

  5. C++面试八股文:了解位运算吗?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第12面: 面试官:了解位运算吗? 二师兄:了解一些.(我很熟悉) 面试官:请列举以下有哪些位运算? 二师兄:按位与(&).按位或(|).按位 ...

  6. C++面试八股文:override和finial关键字有什么作用?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第22面: (二师兄好苦逼,节假日还在面试...) 面试官:C++的继承了解吗? 二师兄:(不好意思,你面到我的强项了..)了解一些. 面试官:什么是 ...

  7. Python编程和机器学习中的自然语言处理:如何从文本中提取有意义的信息和数据

    目录 引言 自然语言处理(Natural Language Processing,NLP)是一种人工智能技术,旨在使计算机理解和处理自然语言文本,从中提取有意义的信息和数据.NLP是机器学习领域中的重 ...

  8. React后台管理系统(TypeScript、Redux状态管理)环境搭建01

      搭建环境的时候,我们必须要先确保环境有node环境和npm环境,如下使用cmd命令 确保自己有了这两个环境之后我们就可以开始搭建项目,首先找一个文件夹,这个文件夹用来初始化当前环境,例如,我这里选 ...

  9. 彻底解决各种浏览器访问不了GitHub问题(注意代理)

    如果有穿墙插件如Google助手  VPN  SS 之类别 有可能被全局代理 首先关闭这些软件 或者浏览器插件 假设,您的本地代理端口为:1080 ,打开git base窗口进行按下列的方式设置.(在 ...

  10. Mysql基础4-数据查询

    一.DQL介绍 DQL全称:Data Query Language(数据查询语言),用来查询数据库中表的记录. 关键字:select 二.DQL语法 select 字段列表 from 表名列表 whe ...