Elasticsearch(一)基本语法命令

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

目录

 

一、常用操作

二、索引的基本操作

1、创建索引 

2、查询索引 (查询索引规则及其它信息)

3、修改索引

方式1(PUT):旧的方式(不推荐)

方式2(POST):可以只改变部分字段(推荐)

4、删除索引

三、文档的基本操作

1、添加数据

2、查询数据【简单查询】

1、查询索引下的全部

2、根据文档id查询 

3、条件筛选查询(根据分词拆分规则匹配的)【不建议使用这种写法】

3、修改数据

【PUT】方式更新:整体覆盖,也可理解为创建覆盖(不推荐​​​​​​​)

【POST】方式更新:只更新需要的字段(推荐​​​​​​​)

4、删除数据

【POST】方式删除:条件删除 (可支持多条件删除)

四、文档的复杂查询【重要】

1、返回数据基本说明 

2、单字段多个条件匹配(match)

3、单字段精确匹配(term)

4、多条件复杂查询(bool)

5、返回值控制(_source)

6、查询排序(sort)

7、查询分页(from、size)

8、高亮查询结果(highlight)

五、定义文档规则【重要】

1、关于分词

2、查看分词结果(_analyze)

3、创建文档规则

1、创建文档(及测试数据)

2、查询结果案例


一、常用操作

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 查询所有数据

elasticsearch工具自带命令

通过命令elasticsearch索引情况!通过 GET_cat/  可以获得es当前的很多信息

GET _cat/indices?v

elasticsearch 查看分词结果,分布式、微服务系列,大数据

二、索引的基本操作

1、创建索引 

1、创建一个索引(同时写入数据)

PUT /索引名/[类型名]/文档id

{

请求体

}

elasticsearch 查看分词结果,分布式、微服务系列,大数据 执行结果说明

{
  "_index" : "test1",      //索引名
  "_type" : "type",        //类型名
  "_id" : "1",             //id
  "_version" : 1,          //为1表示没有被更新过(每更新一次会+1)
  "result" : "created",    //created创建状态
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

2、创建一个索引规则(只创建索引和字段,不写入数据)

其中设置了每个字段的类型 type

elasticsearch 查看分词结果,分布式、微服务系列,大数据

 执行结果说明

{
  "acknowledged" : true,
  "shards_acknowledged" : true,    //状态成功
  "index" : "test2"                //索引名
}

2、查询索引 (查询索引规则及其它信息)

GET /索引名 

获得规则信息,可以通过 GET 请求获取具体的信息

elasticsearch 查看分词结果,分布式、微服务系列,大数据

创建时不指定字段类型

如果自己的文档字段没有指定类型,那么ES就会给我们默认配置字段类型

elasticsearch 查看分词结果,分布式、微服务系列,大数据

3、修改索引

方式1(PUT):旧的方式(不推荐)

PUT /索引名/[类型名]/文档id
{
  "name":"sally",
  "age":25,
  "birth":"1997-01-05"

}

PUT /索引名/[类型名]/文档id
{
  "name":"sally",
  "age":25,
  "birth":"1997-01-05"
}

elasticsearch 查看分词结果,分布式、微服务系列,大数据

方式2(POST):可以只改变部分字段(推荐)

POST /索引名/[类型名]/文档id/_update
{
  "doc":{
   
"name":"sally666"
  }
}

POST /索引名/[类型名]/文档id/_update
{
  "doc":{
    "name":"sally666"
  }
}

elasticsearch 查看分词结果,分布式、微服务系列,大数据

PUT /test3/_doc/1
{
  "name":"sally",
  "age":25,
  "birth":"1997-01-05"
}



POST /test3/_doc/1/_update
{
  "doc":{
    "name":"sally666"
  }
}

4、删除索引

DELETE /索引名

通过DELETE 命令实现删除,根据你的请求来判断是删除索引还是删除索引下的文档记录

elasticsearch 查看分词结果,分布式、微服务系列,大数据

三、文档的基本操作

1、添加数据

PUT /索引名/[类型名]/文档id

{

请求体

}

elasticsearch 查看分词结果,分布式、微服务系列,大数据

PUT demo_learn/_doc/1
{
  "name":"jerry",
  "age":25,
  "desc":"会滑板的程序猿",
  "tags":["技术大牛","性格好","暖男"]
}

PUT demo_learn/_doc/2
{
  "name":"max",
  "age":25,
  "desc":"实力与幸运并存",
  "tags":["技术大牛","性格好","暖男"]
}

PUT demo_learn/_doc/3
{
  "name":"jason",
  "age":25,
  "desc":"灵魂一问",
  "tags":["技术大牛","性格好","暖男"]
}

2、查询数据【简单查询】

返回数据基本说明【重要】


  "hits" : {        //索引和文档的信息
    "total" : {        
      "value" : 1,        //结果数量
      "relation" : "eq"
    },
    "max_score" : 1.6375021,        //文档数据中最大的分值
    "hits" : [
      {
        "_index" : "demo_learn",        //索引名
        "_type" : "_doc",                     //文档类型
        "_id" : "3",                               //文档id
        "_score" : 1.6375021,            //文档数据分值(如果查询结果存在多条,匹配度越高,分值则越高)
        "_source" : {                           //文档数据内容
          "name" : "jason",
          "age" : 25,
          "desc" : "灵魂一问",
          "tags" : [
            "技术大牛",
            "性格好",
            "暖男"
          ]
        }
      }
    ]
  }

"hits" : {                            //索引和文档的信息
    "total" : {
      "value" : 2,                    //结果数量
      "relation" : "eq"
    },
    "max_score" : 1.0341108,          //文档数据中最大的分值
    "hits" : [
      {
        "_index" : "demo_learn",      //索引名
        "_type" : "_doc",             //文档类型
        "_id" : "2",                  //文档id
        "_score" : 1.0341108,         //文档数据分值(如果查询结果存在多条,匹配度越高,分值则越高)
        "_source" : {                 //文档数据内容
          "name" : "max",
          "age" : 25,
          "desc" : "实力与幸运并存",
          "tags" : [
            "技术大牛",
            "性格好",
            "暖男"
          ]
        }
      },
      {
        "_index" : "demo_learn",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : 0.542544,
        "_source" : {
          "name" : "max哈哈哈",
          "age" : 25,
          "desc" : "实力与幸运并存",
          "tags" : [
            "技术大牛",
            "性格好",
            "暖男"
          ]
        }
      }
    ]
  }

1、查询索引下的全部

GET 索引名/_search

elasticsearch 查看分词结果,分布式、微服务系列,大数据

2、根据文档id查询 

GET 索引名/_doc/文档id

elasticsearch 查看分词结果,分布式、微服务系列,大数据

3、条件筛选查询(根据分词拆分规则匹配的)【不建议使用这种写法】

GET 索引名/_doc/_search?q=数据名:数据值

elasticsearch 查看分词结果,分布式、微服务系列,大数据

3、修改数据

【PUT】方式更新:整体覆盖,也可理解为创建覆盖(不推荐​​​​​​​)

注意:put 在修改时,请求体如果数据少了几个字段(不是全量的数据),会进行整体数据覆盖,那么该字段数据就会被置空(如图二)

elasticsearch 查看分词结果,分布式、微服务系列,大数据

elasticsearch 查看分词结果,分布式、微服务系列,大数据

【POST】方式更新:只更新需要的字段(推荐​​​​​​​)

POST /索引名/[类型名]/文档id/_update
{
  "doc":{
   
"需要更新的字段":"内容"
  }
}

POST /索引名/[类型名]/文档id/_update
{
  "doc":{
    "需要更新的字段":"内容"
  }
}

elasticsearch 查看分词结果,分布式、微服务系列,大数据

4、删除数据

【POST】方式删除:条件删除 (可支持多条件删除)

POST /索引名/[类型名]/_delete_by_query

{
  "query":{
    "match":{

      "查询的字段":"查询内容"
    }
  }
}

POST /索引名/[类型名]/_delete_by_query
{
  "query":{
    "match":{
      "查询的字段":"查询内容"
    }
  }
}

elasticsearch 查看分词结果,分布式、微服务系列,大数据

四、文档的复杂查询【重要】

1、返回数据基本说明 

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {//索引和文档的信息
    "total" : {
      "value" : 2,//结果数量
      "relation" : "eq"
    },
    "max_score" : 1.0341108,//文档数据中最大的分值
    "hits" : [
      {
        "_index" : "demo_learn_1",//索引名
        "_type" : "_doc",//文档类型
        "_id" : "3",//文档id
        "_score" : 1.0341108,//文档数据分值(如果查询结果存在多条,匹配度越高,分值则越高)
        "_source" : {//文档数据内容
          "id" : "3",
          "name" : "max",
          "age" : 25,
          "desc" : "实力与幸运并存",
          "tags" : [
            "技术大牛",
            "性格好",
            "暖男"
          ]
        }
      },
      {
        "_index" : "demo_learn_1",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : 0.542544,
        "_source" : {
          "id" : "4",
          "name" : "max哈哈哈",
          "age" : 25,
          "desc" : "实力与幸运并存",
          "tags" : [
            "技术大牛",
            "性格好",
            "暖男"
          ]
        }
      }
    ]
  }
}

提前构建一些数据 

PUT demo_learn_1/_doc/1
{
  "id" : "1",
  "name" : "jerry",
  "age" : "28",
  "desc" : "会滑板的程序猿,好快乐~~~",
  "tags" : [
    "技术大牛",
    "性格好",
    "暖男"
  ]
}

PUT demo_learn_1/_doc/2 
{
  "id" : "2",
  "name" : "jason",
  "age" : 27,
  "desc" : "灵魂一问",
  "tags" : [
    "技术大牛",
    "性格好",
    "暖男"
  ]
}

PUT demo_learn_1/_doc/3     
{
  "id" : "3",
  "name" : "max",
  "age" : 25,
  "desc" : "实力与幸运并存",
  "tags" : [
    "技术大牛",
    "性格好",
    "暖男"
  ]
}

PUT demo_learn_1/_doc/4
{
  "id" : "4",
  "name" : "max哈哈哈",
  "age" : 25,
  "desc" : "实力与幸运并存",
  "tags" : [
    "技术大牛",
    "性格好",
    "暖男"
  ]
}
 
PUT demo_learn_1/_doc/5
{
  "id" : "5",
  "name" : "sally",
  "age" : 26,
  "desc" : "女神",
  "tags" : [
    "技术大牛",
    "性格好",
    "村长"
  ]
}

PUT demo_learn_1/_doc/6
{
  "id" : "6",
  "name" : "marvin",
  "age" : 24,
  "desc" : "哦,雪季的快乐",
  "tags" : [
    "技术大牛",
    "性格好",
    "滑雪滑雪"
  ]
}

2、单字段多个条件匹配(match)

会使用分词器解析匹配 ,先分析文档,然后再通过分析的文档进行查询

  • match 查询词会被分词
  • match_phrase 不会分词
  • match_phrase 可对多个字段进行匹配 

GET 索引名/_search
{
  "query":{
    "match":{

      "查询的字段":"查询内容"
    }
  }
}

GET 索引名/_search
{
  "query":{
    "match":{
      "查询的字段":"查询内容"
    }
  }
}

多条件使用空格隔开,只要满足其中一个结果就可以被查出,若有需要此时可以通过分值进行判断

elasticsearch 查看分词结果,分布式、微服务系列,大数据

elasticsearch 查看分词结果,分布式、微服务系列,大数据

3、单字段精确匹配(term)

tram查询直接通过倒排索引指定的词条进行精确查找

term 代表完全匹配,不进行分词器分析
term 查询的字段需要在mapping的时候定义好,否则可能词被分词。传入指定的字符串,查不到 

GET 索引名/_search
{
  "query": {
    "term": {
     
"查询的字段":"查询内容"
    }
  }
}

GET 索引名/_search
{
  "query": {
    "term": {
      "查询的字段":"查询内容"
    }
  }
}

4、多条件复杂查询(bool)

关键字 描述
must(and) 相当于where 字段名1=值1 and 字段名2=值3
must_not(not) 不等于
should(or) 相当于where 字段名1=值1 or 字段名2=值3
filter

过滤器条件

range:区间

        gt:大于

        gte:大于等于

        lt:小于

        lte:小于等于

GET 索引名/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
           
"查询的字段":"查询内容"
          }
        },
        {
          "match": {
           
"查询的字段":"查询内容"
          }
        }
      ]
    }
  }
}

GET 索引名/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
           
"查询的字段":"查询内容"
          }
        },
        {
          "term": {
           
"查询的字段":"查询内容"
          }
        }
      ], 
      "should": [
        {
          "match": {
           
"查询的字段":"查询内容"
          }
        }
      ]
  }
}
 

elasticsearch 查看分词结果,分布式、微服务系列,大数据

5、返回值控制(_source)

通过"_source"的方式控制只返回需要的结果

GET 索引名/_search
{
  "query": {
    "match": {
     
"查询的字段":"查询内容"
    }
  },
  "_source": [
"返回字段1","返回字段2"]
}

GET 索引名/_search
{
  "query": {
    "match": {
      "查询的字段":"查询内容"
    }
  },
  "_source": ["返回字段1","返回字段2"]
}

elasticsearch 查看分词结果,分布式、微服务系列,大数据

6、查询排序(sort)

通过"sort"的方式控制排序

GET 索引名/_search
{
  "query": {
    "match": {
     
"查询的字段":"查询内容"
    }
  },
  "sort": [
    {
     
"字段名": {
        "order": "desc"
      }
    }
  ]
}

7、查询分页(from、size)

通过"from"控制起始行(默认从0开始),"size"控制查几条

同 MySQL 的 limit 相似

GET 索引名/_search
{

  "from": 从第几条数据开始,
  "size":
查询几条
}

elasticsearch 查看分词结果,分布式、微服务系列,大数据

8、高亮查询结果(highlight)

搜索的相关结果可以高亮展示 

GET 索引名/_search
{
  "query": {
    "match": {
     
"查询的字段":"查询内容"
    }
  },
  "highlight": {
    "pre_tags":
标签头,
    "post_tags":
标签尾
    "fields": {
      "
字段名": {}
    }
  }
}

GET demo_learn_1/_search
{
  "query": {
    "match": {
      "查询的字段":"查询内容"
    }
  },
  "highlight": {
    "pre_tags": 标签头,
    "post_tags": 标签尾, 
    "fields": {
      "字段名": {}
    }
  }
}

默认标签

elasticsearch 查看分词结果,分布式、微服务系列,大数据

自定义标签elasticsearch 查看分词结果,分布式、微服务系列,大数据

五、定义文档规则【重要】

1、关于分词

term:直接查询精确的解析(会用到分词器,分词器存在两种情况,text 和 keyword)

match:会使用分词器解析!(先分析文档,然后再通过分析的文档进行查询)

两个类型

  • text:会被分词器分析
  • keyword:不会被分词器分析

2、查看分词结果(_analyze)

keyword:一个整体,不进行分词分析

standard:标准分词器

//分词结果(keyword)
GET _analyze
{
  "analyzer": "keyword",
  "text": ["张三java name"]
}


//分词结果(standard)
GET _analyze
{
  "analyzer": "standard",
  "text": ["张三java name"]
}

elasticsearch 查看分词结果,分布式、微服务系列,大数据

 ​elasticsearch 查看分词结果,分布式、微服务系列,大数据

3、创建文档规则

1、创建文档(及测试数据)

# 创建文档规则
PUT demo_learn_2
{
  "mappings": {
    "properties": {
      "name":{                //字段名                    
        "type": "text"        //字段类型
      },
      "desc":{
        "type": "keyword"
      }
    }
  }
}


# 创建数据
PUT demo_learn_2/_doc/1
{
  "name":"张三java name",
  "desc":"张三java desc"
}

PUT demo_learn_2/_doc/2
{
  "name":"张三java name2",
  "desc":"张三java desc2"
}

elasticsearch 查看分词结果,分布式、微服务系列,大数据

2、查询结果案例

(1)text类型的检索结果

字段name的类型定义为text内容被分词解析器解析为多个分词结果,其中一个就是“张”所以可以查到

elasticsearch 查看分词结果,分布式、微服务系列,大数据

(2)keyword类型检索结果

字段desc的类型定义为keyword内容不会被分词器进行解析

elasticsearch 查看分词结果,分布式、微服务系列,大数据文章来源地址https://www.toymoban.com/news/detail-519916.html

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

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

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

相关文章

  • Elasticsearch使用系列-ES增删查改基本操作+ik分词

    ES是一个NoSql数据库应用。和其他数据库一样,我们为了方便操作查看它,需要安装一个可视化工具 Kibana。 官网: https://www.elastic.co/cn/downloads/kibana 和前面安装ES一样,选中对应的环境下载,这里选择windows环境,注意安装的版本一定要和ES的版本一致,不然可能会启动不起来。

    2024年02月01日
    浏览(56)
  • Elasticsearch从入门到精通-03基本语法学习

    👏作者简介:大家好,我是程序员行走的鱼 📖 本篇主要介绍和大家一块学习一下ES基本语法,主要包括索引管理、文档管理、映射管理等内容 ES对数据进行增、删、改、查是以Restful方式对服务端发送请求的,所以在我们学习基本语法之前先了解一下Restful是什么? REST 指的是一

    2024年03月15日
    浏览(48)
  • elasticsearch 基本语法(常见的RESTFUL API)

    测试数据内容: 1.Query String 语法 ① timeout - - - 设置超时时间 ② eq 语法 ③ 分页     from = 第几页面 size =每页显示的个数 sort =price:asc 注意: 按照字段排序之后查询结果score为null 2.Query DSL 语法 ① match_all - – -匹配所有 ② match - - -根据属性的值去匹配 ③ multi_match —多个字段

    2023年04月09日
    浏览(42)
  • Elasticsearch 查询和聚合查询:基本语法和统计数量

    摘要:Elasticsearch是一个强大的分布式搜索和分析引擎,提供了丰富的查询和聚合功能。本文将介绍Elasticsearch的基本查询语法,包括预发查询和聚合查询,以及如何使用聚合功能统计数量。 Elasticsearch是一种开源的分布式搜索和分析引擎,广泛应用于各种场景,包括日志分析、

    2024年02月11日
    浏览(49)
  • ElasticSearch 中的中文分词器以及索引基本操作详解,Java高并发编程详解深入理解pdf

    PUT book/_settings { “number_of_replicas”: 2 } 修改成功后,如下: 更新分片数也是一样。 2.3 修改索引的读写权限 索引创建成功后,可以向索引中写入文档: PUT book/_doc/1 { “title”:“三国演义” } 写入成功后,可以在 head 插件中查看: 默认情况下,索引是具备读写权限的,当然这

    2024年04月09日
    浏览(51)
  • 【Elasticsearch学习笔记二】es的Mapping字段映射、Mapping字段常用类型、Mapping映射的创建、查看和更新、es数据迁移、ik分词器

    目录 1、Mapping字段映射概述 2、Mapping字段常用类型 3、映射中对时间类型详解 1)采取自动映射器来映射 2)手工映射提前指定日期类型 4、ES的keyword的属性ignore_above 5、Mapping映射的查看和创建 1)查看mapping信息:GET 索引名/_mapping 2)创建映射:PUT /索引名 3) 查看所有索引映

    2024年01月20日
    浏览(61)
  • 【ElasticSearch】分词器(ElasticSearchIK分词器)

    •IKAnalyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包 •是一个基于Maven构建的项目 •具有60万字/秒的高速处理能力 •支持用户词典扩展定义 IK 分词器安装 IK分词器有两种分词模式:ik_max_word 和 ik_smart 模式。 1、 ik_max_word 会将文本做最细粒度的拆分,比如会

    2024年02月04日
    浏览(38)
  • ElasticSearch-使用IK分词器进行分词

    使用KIbana测试IK分词器 打开开发工具台 ik_smart 最少分词器 分词结果比较少 ik_max_word 颗粒度最细分词器 分词结果比较多,组成各种结果,穷尽词库的可能! 再看个例子,把我们的句子换成 超级喜欢魏一鹤学习Java 首先看最少分词 然后是最细颗粒度分词 问题来了 我们输入超级喜

    2024年02月13日
    浏览(41)
  • Elasticsearch 全文检索 分词检索-Elasticsearch文章四

    https://www.elastic.co/guide/en/enterprise-search/current/start.html https://www.elastic.co/guide/en/elasticsearch/reference/7.17/query-dsl-match-query.html Full text Query中,我们只需要把如下的那么多点分为3大类,你的体系能力会大大提升 很多api都可以查得到,我们只要大概知道有支持哪些功能 Elasticsearch 执行

    2024年02月14日
    浏览(53)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包