超详细讲解Elasticsearch的基本操作

这篇具有很好参考价值的文章主要介绍了超详细讲解Elasticsearch的基本操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

📢📢📢📣📣📣

哈喽!大家好,我是【一心同学】,一位上进心十足的【Java领域博主】!😜😜😜

✨【一心同学】的写作风格:喜欢用【通俗易懂】的文笔去讲解每一个知识点,而不喜欢用【高大上】的官方陈述。

✨【一心同学】博客的领域是【面向后端技术】的学习,未来会持续更新更多的【后端技术】以及【学习心得】。

✨如果有对【后端技术】感兴趣的【小可爱】,欢迎关注一心同学】💞💞💞

❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️ 


目录

一、Rest风格是什么?

二、索引的基本操作

2.1 创建索引并添加数据

2.2 获取规则

2.3 指定字段类型

2.4 删除索引

三、文档的基本操作

3.1 添加数据 

3.2 获取数据 

3.3 更新数据

第一种:使用PUT

第二种:Post _update(推荐)

3.4 简单查询

四、search查询操作

4.1  条件查询

4.2 模糊查询

4.3 结果过滤

4.4  排序

4.5 分页

4.6 多条件查询

🌴 must

🌴 should

🌴 must_not(not)

4.7 过滤器

4.8 多条件查询

🌵 环境准备

🌵 查询

4.9 精确查询

4.9.1 text与keyword

4.9.2 环境准备

4.9.3 查询

4.10 多值匹配精确查询

4.11 高亮

🚀 默认样式

🚀 自定义高亮的样式

小结


一、Rest风格是什么?

Rest风格是一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

基本Rest命令:

method url地址 描述
PUT(创建,修改) localhost:9200/索引名称/类型名称/文档id 创建文档(指定文档id)
POST(创建) localhost:9200/索引名称/类型名称 创建文档(随机文档id)
POST(修改) localhost:9200/索引名称/类型名称/文档id/_update 修改文档
DELETE(删除) localhost:9200/索引名称/类型名称/文档id 删除文档
GET(查询) localhost:9200/索引名称/类型名称/文档id 查询文档通过文档ID
POST(查询) localhost:9200/索引名称/类型名称/文档id/_search 查询所有数据

二、索引的基本操作

2.1 创建索引并添加数据

 语法:

PUT /索引名/类型名/文档id
{

请求体

}

代码:

PUT /yixin/user/1
{
  "name":"一心",
  "age":18
}

结果:

超详细讲解Elasticsearch的基本操作

 这样是创建成功的,但其提示告诉我们type 在未来的版本中会逐渐弃用,因此产生一个默认类型_doc 进行代替。

2.2 获取规则

作用:通过 GET 可以请求获取具体的信息,查看我们的索引信息。

语法

GET 索引名

输入:

GET yixin

结果:

可以发现如果我们在创建索引的时候,没有指定字段类型,那么其会默认给我们的字段赋予类型的。

超详细讲解Elasticsearch的基本操作

2.3 指定字段类型

作用:用来创建规则,类似于建库(建立索引和字段对应类型),也可看做规则的建立。

常用的字段数据类型:

类型 属性
字符串类型

text:支持分词,全文检索,支持模糊、精确查询,不支持聚合,排序操作;text类型的最大支持的字符长度无限制,适合大字段存储;

keyword:不进行分词,直接索引、支持模糊、支持精确匹配,支持聚合、排序操作。keyword类型的最大支持的长度为——32766个UTF-8类型的字符,可以通过设置ignore_above指定自持字符长度,超过给定长度后的数据将不被索引,无法通过term精确匹配检索返回结果。

数值型 long、Integer、short、byte、double、float、half float、scaled float
日期类型 date
布尔类型 boolean
二进制类型 binary

代码:

PUT /test1
{
  "mappings": {
    "properties": {
      "name":{
        "type": "text"
      },
      "age":{
        "type": "long"
      },
      "birthday":{
        "type": "date"
      }
    }
  }
}

获取规则:

超详细讲解Elasticsearch的基本操作

 现在我们只需要根据对应的类型进行插入数据即可:

PUT /test1/_doc/1
{
  "name":"一心",
  "age":18,
  "birthday":"2000-01-01"
}

2.4 删除索引

语法

DELETE /索引名

输入

DELETE /test1

注意:如果只是要删除某一条文档则是DELETE /test1/_doc/1

三、文档的基本操作

3.1 添加数据 

代码:

PUT /yixin/user/1
{
  "name":"yixin",
  "age":18
}

查看索引的数据:

超详细讲解Elasticsearch的基本操作

3.2 获取数据 

代码:

GET yixin/user/1

结果:

超详细讲解Elasticsearch的基本操作

3.3 更新数据

第一种:使用PUT

代码:

PUT /yixin/user/2
{
  "name":"一心同学",
  "age":18
}

输出:

分析:“version”代表这个数据被改动的次数,每次执行PUT,无论是否进行改动,verson值都会增加,而且如果PUT的文档属性没有传递值,则会进行覆盖操作。

超详细讲解Elasticsearch的基本操作

第二种:Post _update(推荐)

代码:

POST yixin/user/2/_update
{
  "doc":{
    "name":"一心呀"
  }
}

输出:

分析:“verson”同样是指变动的次数,如果多次执行POST,但不修改,那么verson值不变,而且我们的字段没有设置值不会进行覆盖操作,灵活性高!

超详细讲解Elasticsearch的基本操作

3.4 简单查询

需求:查询某条数据。

GET yixin/user/1

输出:

超详细讲解Elasticsearch的基本操作

需求:查询所有数据。

GET yixin/user/_search

输出:

超详细讲解Elasticsearch的基本操作

四、search查询操作

4.1  条件查询

需求:查询名字带有“一心”并且年龄为18岁的用户。

GET yixin/user/_search?q=name:"一心",age:18

输出:

超详细讲解Elasticsearch的基本操作

4.2 模糊查询

关键字:match

需求:查询命中带有“一心”的用户。

GET yixin/user/_search
{
  "query": {
    "match": {
      "name": "一心"
    }
  }
}

输出:

超详细讲解Elasticsearch的基本操作

4.3 结果过滤

关键字:source

作用:如果我们不希望展示那么多信息,可以使用_source进行结果过滤。

需求:输出的字段中,只显示name。

GET yixin/user/_search
{
  "query": {
    "match": {
      "name": "一心"
    }
  },
  "_source": ["name"]
}

输出:

超详细讲解Elasticsearch的基本操作

4.4  排序

关键字:sort

  • 降序:desc
  • 升序:asc


需求:匹配带有“一心”的名字,并且根据年龄进行降序排列。

GET yixin/user/_search
{
  "query": {
    "match": {
      "name": "一心"
    }
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

输出:

超详细讲解Elasticsearch的基本操作

4.5 分页

关键词
from:从第几个数据开始,下标从0开始。
size:单页面返回多少条数据。

需求:匹配带有“一心”的名字,并且按年龄进行降序,每一页只显示1条数据,返回第一页。

GET yixin/user/_search
{
  "query": {
    "match": {
      "name": "一心"
    }
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ],
  "from": 0,
  "size": 1
}

输出:

超详细讲解Elasticsearch的基本操作

4.6 多条件查询

关键词
bool:布尔值查询
must(and):所有的条件都要符合 where id=1 and name = xxx
should(or):所有的条件都要符合 where id=1 or name = xxx
must_not(not):非,不符合的条件

🌴 must


需求:查询名字带有“一心”并且年龄为19的用户。

GET yixin/user/_search
{
  "query": {
   "bool": {
     "must": [
       {
         "match": {
           "name": "一心"
         }
       },
       {
         "match": {
           "age": "19"
         }
       }
     ]
   }
  }
}

输出:

超详细讲解Elasticsearch的基本操作

🌴 should


需求:查询名字带有“一心”或“张”的用户。

GET yixin/user/_search
{
  "query": {
   "bool": {
     "should": [
       {
         "match": {
           "name": "一心"
         }
       },
       {
         "match": {
           "name": "张"
         }
       }
     ]
   }
  }
}

输出:

超详细讲解Elasticsearch的基本操作

🌴 must_not(not)

需求:查询年龄不是18岁的用户。

GET yixin/user/_search
{
  "query": {
   "bool": {
     "must_not": [
       
       {
         "match": {
           "age": "18"
         }
       }
     ]
   }
  }
}

输出:

超详细讲解Elasticsearch的基本操作

4.7 过滤器

关键字:filter

  • gt 大于
  • gte 大于等于
  • lt 小于
  • lte 小于等于

需求1:查询年龄小于20岁的用户,但不能等于18岁。

GET yixin/user/_search
{
  "query": {
   "bool": {
     "must_not": [
       {
         "match": {
           "age": "18"
         }
       }
     ],
     "filter": {
       "range": {
         "age": {
           "lt": 20
         }
       }
     }
   }
  }
}

输出:

超详细讲解Elasticsearch的基本操作

需求2:查询年龄为15-20岁之间的用户。

GET yixin/user/_search
{
  "query": {
   "bool": {

     "filter": {
       "range": {
         "age": {
           "gte": 15,
           "lte": 20
         }
       }
     }
   }
  }
}

输出:

超详细讲解Elasticsearch的基本操作

4.8 多条件查询

🌵 环境准备

PUT /yixin2/user/1
{
  "name":"一心同学",
  "age":18,
  "tags":["技术","运动","社交"]
}

PUT /yixin2/user/2
{
  "name":"张三",
  "age":20,
  "tags":["游戏","运动","喝咖啡"]
}

PUT /yixin2/user/3
{
  "name":"李四",
  "age":21,
  "tags":["滑雪","技术"]
}

🌵 查询

需求:查询标签拥有“技术”或“运动”的用户。

GET yixin2/user/_search
{
  "query": {
    "match": {
      "tags": "技术 运动"
    }
  }
}

输出:

超详细讲解Elasticsearch的基本操作

4.9 精确查询

关键词:term

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

4.9.1 text与keyword

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

对keyword进行查询:

GET _analyze
{
  "analyzer": "keyword",
  "text": "你好,世界"
}

输出:

可以发现不会对词汇进行拆分!

超详细讲解Elasticsearch的基本操作

对普通类型进行查询:

GET _analyze
{
  "analyzer": "standard",
  "text": "你好,世界"
}

输出:

超详细讲解Elasticsearch的基本操作

4.9.2 环境准备

PUT /yixin3
{
  "mappings": {
    "properties": {
      "name":{
        "type": "keyword"
      },
      "age":{
        "type": "long"
      },
      "desc":{
        "type": "text"
      }
    }
  }
}


PUT /yixin3/_doc/1
{
  "name":"一心同学",
  "age":18,
  "desc":"专注于Java"
}

4.9.3 查询

关键字分词

我们来对“一心同学”进行分词,由于name属于 keyword,所以利用keyword进行分词:

GET _analyze
{
  "analyzer": "keyword",
  "text": "一心同学"
}

输出:

{
  "tokens" : [
    {
      "token" : "一心同学",
      "start_offset" : 0,
      "end_offset" : 4,
      "type" : "word",
      "position" : 0
    }
  ]
}

也就是说对于精确查询我们只能查询“一心同学”才会显示成功!

非关键字分词

GET _analyze
{
  "analyzer": "standard",
  "text": "专注于java"
}

输出:

{
  "tokens" : [
    {
      "token" : "专",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "<IDEOGRAPHIC>",
      "position" : 0
    },
    {
      "token" : "注",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "<IDEOGRAPHIC>",
      "position" : 1
    },
    {
      "token" : "于",
      "start_offset" : 2,
      "end_offset" : 3,
      "type" : "<IDEOGRAPHIC>",
      "position" : 2
    },
    {
      "token" : "java",
      "start_offset" : 3,
      "end_offset" : 7,
      "type" : "<ALPHANUM>",
      "position" : 3
    }
  ]
}

也就是说,对于精确查询,我们只要输入与分词后的任意词汇就可以查询成功!

🚀 查询成功:

GET yixin3/_search
{
  "query": {
    "term": {
      "name":"一心同学"
    }
  }
}

🚀 查询成功:

GET yixin3/_search
{
  "query": {
    "term": {
      "desc":"专"
    }
  }
}

🚀 查询成功:

GET yixin3/_search
{
  "query": {
    "term": {
      "desc":"java"
    }
  }
}

🚀查询失败:

GET yixin3/_search
{
  "query": {
    "term": {
      "name":"一心"
    }
  }
}

🚀查询失败:

GET yixin3/_search
{
  "query": {
    "term": {
      "desc":"专注于Java"
    }
  }
}

分析可得:

查询类型 写入类型 结果
term text
term keyword
match text
match keyword

4.10 多值匹配精确查询

需求:查询名字为“张三”和“一心同学”的用户。

GET yixin3/_search
{
  "query": {
    "bool": {
      "should": [
        
        {
          "term": {
            "name": "张三"
          }
        },{
          "term": {
            "name": "一心同学"
          }
        }
      ]
    }
  }
}

输出:

超详细讲解Elasticsearch的基本操作

4.11 高亮

关键词:highlight

🚀 默认样式

需求:让搜索词汇高亮显示。

GET yixin/_search
{
  "query": {
    "match": {
      "name": "一心"
    }
  },
  "highlight": {
    "fields": {
      "name": {}
    }
  }
}

输出:

超详细讲解Elasticsearch的基本操作

🚀 自定义高亮的样式

pre_tags:前缀
post_tags:后缀

代码:

GET yixin/_search
{
  "query": {
    "match": {
      "name": "一心"
    }
  },
  "highlight": {
    "pre_tags": "<p class='key' style='color:red'>", 
    "post_tags": "</p>", 
    "fields": {
      "name": {}
    }
  }
}

输出:

超详细讲解Elasticsearch的基本操作


小结

以上就是【一心同学】整理的关于【ElasticSearch的基本操作】,对于以上的知识点非常重要,大家务必要【掌握】,建议跟着【一心同学】的思路自己动手敲一遍,相信会掌握得【更快】!

如果这篇【文章】有帮助到你,希望可以给【一心同学】点个👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点,如果有对【后端技术】感兴趣的小可爱,也欢迎关注❤️❤️❤️ 【一心同学】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!文章来源地址https://www.toymoban.com/news/detail-438487.html

到了这里,关于超详细讲解Elasticsearch的基本操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElasticSearch - 基本操作

    本文记录 ES 的一些基本操作,就是对官方文档的一些整理,按自己的习惯重新排版,凑合着看。官方的更详细,建议看官方的。 下文以 books 为索引名举例。 添加单个文档 (没有索引会自动创建) 不指定 id,会随机生成,如果需要指定 id,使用 POST books/_doc/id 还可以使用 put 的

    2024年03月20日
    浏览(22)
  • ElasticSearch8 - 基本操作

    本文记录 ES 的一些基本操作,就是对官方文档的一些整理,按自己的习惯重新排版,凑合着看。官方的更详细,建议看官方的。 下文以 books 为索引名举例。 添加单个文档 (没有索引会自动创建) 不指定 id,会随机生成,如果需要指定 id,使用 POST books/_doc/id 还可以使用 put 的

    2024年04月09日
    浏览(19)
  • ElasticSearch基本api操作

    本文章下列所用es本意都为Elaticsearch Elaticsearch ,简称为es, es是一 个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好, 可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索弓和搜

    2024年02月05日
    浏览(20)
  • elasticsearch基本操作之--QueryBuilders

    使用QueryBuilders进行范围时间组合查询 es存储日志 是按照UTC时间格式存放,以@timestamp 作为时间范围查询条件,即from(Date1) to(Date2)Date1、Date2入参必须是标准的utc格式; 数字

    2024年02月13日
    浏览(28)
  • Elasticsearch的基本操作与管理

    Elasticsearch是一个基于分布式搜索和分析引擎,由Netflix开发,后被Elasticsearch公司继承。它是一个实时、可扩展、高性能的搜索引擎,可以处理大量数据并提供快速、准确的搜索结果。Elasticsearch使用Lucene库作为底层搜索引擎,并提供RESTful API和JSON格式进行数据交互。 Elasticsea

    2024年02月20日
    浏览(15)
  • Elasticsearch(四)——ES基本操作

    一、Rest风格说明( 非常重要 ) Rest风格一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。 它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 基于Rest命令说明 method url地址 描述 PUT localh

    2024年02月02日
    浏览(17)
  • ElasticSearch Java API 基本操作

    ElasticSearch Java API是ES官方在8.x版本推出的新java api,也可以适用于7.17.x版本的es。 本文主要参考了相关博文,自己手动编写了下相关操作代码,包括更新mappings等操作的java代码。 代码示例已上传github。 elasticsearch 版本: 7.17.9 ,修改 /elasticsearch-7.17.9/config/elasticsearch.yml ,新增

    2024年02月08日
    浏览(26)
  • ElasticSearch 8.11 基本操作练习

    ES 8.0 默认把type给去掉了 新增/编辑 PUT /index/id  幂等操作 必须指定id 同一个id为修改 POST /index/id 非幂等操作 指定id时和put操作一样 不指定id 每次都会新增 id为系统随机分配 删除 DELETE /index  删除整个索引 DELETE /index/_doc/id  删除指定document  查询  GET /index/_search  不带条件查

    2024年02月04日
    浏览(21)
  • Elasticsearch 7.x 基本操作 (CRUD)

    Elasticsearch 是一个流行的开源搜索引擎,用于存储、搜索和分析数据。下面是 Elasticsearch 7.x 版本的基本操作(CRUD): 1、创建索引: 2、查看索引: 3、删除索引: 4、创建文档: 5、获取文档: 6、更新文档: 7、删除文档: 这些操作可以通过 Elasticsearch 的 REST API 进行。注意

    2024年02月15日
    浏览(17)
  • Elasticsearch之java的基本操作一

    摘要   接触ElasticSearch已经有一段了。在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题。看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得都不是很全面。因此就有了写ElasticSearch开发教程的想法,将学习到的技术经验分享出来,

    2024年02月05日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包