ES Restful操作

简介: ES Restful操作

一、restful风格介绍

二、索引增删改查

1、增加索引

命令:put 索引名称/文档类型/文档id

PUT test/user/1

{

 "name":"张三",

 "age": 12,

 "dec": "测试一下"

}

字段也是可以自己定义类型的 如果要添加字段类型,则如下操作

常见类型

说明:

1、put 索引名称/文档类型/文档id 中的文档类型在8版本废弃掉 默认就是 _doc类型

2、在es 2.*版本里面是没有这两个字段,只有string字段。5.*之后,把string字段设置为了过时字段,引入text,keyword字段

这两个字段都可以存储字符串使用,但建立索引和搜索的时候是不太一样的

keyword:存储数据时候,不会分词建立索引

text:存储数据时候,会自动分词,并生成索引(这是很智能的,但在有些字段里面是没用的,所以对于有些字段使用text则浪费了空间)。

一切文本类型的字符串可以定义成 “text”或“keyword”两种类型。区别在于,text类型会使用默认分词器分词,当然你也可以为他指定特定的分词器。如果定义成keyword类型,那么默认就不会对其进行分词。

2、查询

命令 GET 索引名

3、修改

方式1:使用增加命令覆盖原来内容

方式2:

POST 索引/文档类型/文档id/_update

POST test/user/2/_update

{

 "doc":{

   "name":"李四2",

   "age": 12,

   "dec": "测试一下",

   "tags":["唱歌","rap","旅游"]

 }

}

4、删除

通过DELETE 命令判断删除的是索引还是文档记录

三、文档操作

1、增加文档

PUT test/user/1

{

 "name":"张三",

 "age": 12,

 "dec": "测试一下"

}


PUT test/user/2

{

 "name":"李四四",

 "age": 12,

 "dec": "测试一下",

 "tags":["唱歌","rap","旅游"]

}

2、修改文档

//put方式更新 每有值得会被置为空

PUT test/user/2

{

 "name":"李四四"

}

//推荐post _update更新

POST test/user/2/_update

{

 "doc":{

   "name":"李四2",

   "age": 12,

   "dec": "测试一下",

   "tags":["唱歌","rap","旅游"]

 }

}

3、删除文档

DELETE test/user/1

4、查询文档

通过id查询

GET test/user/2

条件查询

GET test/user/_search?q=name:张三

复杂操作查询

1、模糊匹配查询

GET test/user/_search

{

 "query":{

   "match": {

     "name": "张三"

   }

 }

}

结果

{

 "took" : 0,

 "timed_out" : false,

 "_shards" : {

   "total" : 1,

   "successful" : 1,

   "skipped" : 0,

   "failed" : 0

 },

 "hits" : {

   "total" : {

     "value" : 3,

     "relation" : "eq"

   },

   "max_score" : 0.847103,

   "hits" : [

     {

       "_index" : "test",

       "_type" : "user",

       "_id" : "3",

       "_score" : 0.847103,

       "_source" : {

         "name" : "张三三",

         "age" : 12,

         "dec" : "测试一下"

       }

     },

     {

       "_index" : "test",

       "_type" : "user",

       "_id" : "1",

       "_score" : 0.8259841,

       "_source" : {

         "name" : "张三",

         "age" : 12,

         "dec" : "测试一下"

       }

     },

     {

       "_index" : "test",

       "_type" : "user",

       "_id" : "4",

       "_score" : 0.62774795,

       "_source" : {

         "name" : "张三学java",

         "age" : 12,

         "dec" : "测试一下"

       }

     }

   ]

 }

}


hist就是索引和文档的信息,是一个json,通过java可以遍历查询相关的信息

2、查询指定的字段即字段过滤

只查询name

GET test/user/_search

{

 "query":{

   "match": {

     "name": "张三"

   }

 },

 "_source":["name"]

}

结果

{

 "took" : 1,

 "timed_out" : false,

 "_shards" : {

   "total" : 1,

   "successful" : 1,

   "skipped" : 0,

   "failed" : 0

 },

 "hits" : {

   "total" : {

     "value" : 3,

     "relation" : "eq"

   },

   "max_score" : 0.847103,

   "hits" : [

     {

       "_index" : "test",

       "_type" : "user",

       "_id" : "3",

       "_score" : 0.847103,

       "_source" : {

         "name" : "张三三"

       }

     },

     {

       "_index" : "test",

       "_type" : "user",

       "_id" : "1",

       "_score" : 0.8259841,

       "_source" : {

         "name" : "张三"

       }

     },

     {

       "_index" : "test",

       "_type" : "user",

       "_id" : "4",

       "_score" : 0.62774795,

       "_source" : {

         "name" : "张三学java"

       }

     }

   ]

 }

}

3、结果排序

GET test/user/_search

{

 "query":{

   "match": {

     "name": "张三"

   }

 },

 "sort":[

   {

     "age":{

       "order":"desc"

     }

   }

   

 ]

}

4、分页插叙

from第几页开始 size返回多少条数据

GET test/user/_search

{

 "query":{

   "match": {

     "name": "张三"

   }

 },

 "from":0,

 "size":3

}

说明

数据下标还是从0开始的

5、布尔值查询

must所有的条件都是符合类似and

should类似or

must_not类似not

GET test/user/_search

{

 "query":{

   "bool": {

     "must": [

       {

         "match": {

           "name": "张三"

         }

       },

       {

         "match": {

           "age": 22

         }

       }

     ]

   }

 }

}

6、使用filte过滤

GET test/user/_search

{

 "query":{

   "bool": {

     "should": [

       {

         "match": {

           "name": "张三"

         }

       }

     ],

     "filter": [

       {

         "range": {

           "age": {

             "gte": 10,

             "lte": 18

           }

         }

       }

     ]

   }

 }

}

gt大于

lt小于

gte大于等于

lte小于等于

7、匹配多条件

GET test/user/_search

{

 "query":{

   "match": {

     "tags": "唱歌 rap"

   }

 }

}

多个条件使用空格分隔,只要满足其中一个就可以查询

8、term精确查询

1. term&match

  • term: 精确查询,对查询的值不分词,直接进倒排索引去匹配。
  • match; 模糊查询,对查询的值分词,对分词的结果一一进入倒排索引去匹配

2. text&keyword

  • text: 在写入时,对写入的值进行分词,然后一一插入到倒排索引。
  • keyword: 在写入时,将整个值插入到倒排索引中,不进行分词。

3. 实例分析

  • 写入值为 hello world,
  • 查询值为 hello world

查询类型

写入类型

结果

term

text

term

keyword

match

text

match

keyword

//创建索引

PUT /test

{

 "mappings": {

   "properties": {

     "name":{

       "type": "keyword"

     },

     "desc":{

       "type": "text"

     }

   }

 }

}


//增加数据

PUT test/_doc/1

{

 "name":"测试 java一号",

 "desc":"测试 java一号"

}


//name是keyword类型的 可以精确匹配查询到

GET test/_search

{

 "query": {

   "term": {

     "name": "测试 java一号"

   }

 }

}

//desc是text类型无法精确匹配查询

GET test/_search

{

 "query": {

   "term": {

     "desc":"测试 java一号"

   }

 }

}


9、多个值匹配的精确查询

10、高亮查询

默认是em标签

GET test/_search

{

 "query": {

   "match": {

     "desc": "测试"

   }

 },

 "highlight": {

   "fields": {

     "desc": {}

   }

 }

}

如何自定义标签

GET test/_search

{

 "query": {

   "match": {

     "desc": "测试"

   }

 },

 "highlight": {

   "pre_tags": "<p class='key' style='color:red'>",

   "post_tags": "</p>",

   "fields": {

     "desc": {}

   }

 }

}



相关文章
|
1月前
|
消息中间件 JSON NoSQL
从 ES Kafka Mongodb Restful ... 取到 json 之后
JSON 是一种广泛使用的数据交换格式,但其计算和处理能力有限。esProc SPL 是一款强大的开源计算引擎,能够高效解析 JSON 数据,并支持复杂的过滤、分组、连接等操作。它不仅兼容多种数据源,如 RESTful、ElasticSearch、MongoDB 和 Kafka,还提供了游标对象处理大数据流,支持与 Java 应用无缝集成,实现灵活的业务逻辑处理。
|
26天前
|
JSON 缓存 JavaScript
深入浅出:使用Node.js构建RESTful API
在这个数字时代,API已成为软件开发的基石之一。本文旨在引导初学者通过Node.js和Express框架快速搭建一个功能完备的RESTful API。我们将从零开始,逐步深入,不仅涉及代码编写,还包括设计原则、最佳实践及调试技巧。无论你是初探后端开发,还是希望扩展你的技术栈,这篇文章都将是你的理想指南。
|
19天前
|
JSON JavaScript 前端开发
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将引导您步入Node.js的奇妙世界,通过实践操作,掌握如何使用这一强大的JavaScript运行时环境构建高效、可扩展的RESTful API。我们将一同探索Express框架的使用,学习如何设计API端点,处理数据请求,并实现身份验证机制,最终部署我们的成果到云服务器上。无论您是初学者还是有一定基础的开发者,这篇文章都将为您打开一扇通往后端开发深层知识的大门。
36 12
|
22天前
|
XML JSON 缓存
深入理解RESTful API设计原则与实践
在现代软件开发中,构建高效、可扩展的应用程序接口(API)是至关重要的。本文旨在探讨RESTful API的核心设计理念,包括其基于HTTP协议的特性,以及如何在实际应用中遵循这些原则来优化API设计。我们将通过具体示例和最佳实践,展示如何创建易于理解、维护且性能优良的RESTful服务,从而提升前后端分离架构下的开发效率和用户体验。
|
25天前
|
监控 安全 API
深入浅出:构建高效RESTful API的最佳实践
在数字化时代,API已成为连接不同软件和服务的桥梁。本文将带你深入了解如何设计和维护一个高效、可扩展且安全的RESTful API。我们将从基础概念出发,逐步深入到高级技巧,让你能够掌握创建优质API的关键要素。无论你是初学者还是有经验的开发者,这篇文章都将为你提供实用的指导和启示。让我们一起探索API设计的奥秘,打造出色的后端服务吧!
|
23天前
|
JSON 缓存 测试技术
构建高效RESTful API的后端实践指南####
本文将深入探讨如何设计并实现一个高效、可扩展且易于维护的RESTful API。不同于传统的摘要概述,本节将直接以行动指南的形式,列出构建RESTful API时必须遵循的核心原则与最佳实践,旨在为开发者提供一套直接可行的实施框架,快速提升API设计与开发能力。 ####
|
26天前
|
JavaScript NoSQL API
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发如同一座灯塔,指引着数据的海洋。本文将带你航行在Node.js的海域,探索如何从一张白纸到完成一个功能完备的RESTful API。我们将一起学习如何搭建开发环境、设计API结构、处理数据请求与响应,以及实现数据库交互。准备好了吗?启航吧!
|
26天前
|
JSON API 数据格式
探索后端开发:从零构建简易RESTful API
在数字时代的浪潮中,后端开发如同搭建一座桥梁,连接着用户界面与数据世界。本文将引导读者步入后端开发的殿堂,通过构建一个简易的RESTful API,揭示其背后的逻辑与魅力。我们将从基础概念出发,逐步深入到实际操作,不仅分享代码示例,更探讨如何思考和解决问题,让每一位读者都能在后端开发的道路上迈出坚实的一步。
|
29天前
|
存储 API 数据库
使用Python和Flask构建简单的RESTful API
使用Python和Flask构建简单的RESTful API
|
29天前
|
JSON 关系型数据库 测试技术
使用Python和Flask构建RESTful API服务
使用Python和Flask构建RESTful API服务