• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Elasticsearch一基本语法命令

武飞扬头像
Marvin-Fox
帮助1

目录

一、常用操作

二、索引的基本操作

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

学新通

二、索引的基本操作

1、创建索引 

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

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

{

请求体

}

学新通 执行结果说明

  1.  
    {
  2.  
    "_index" : "test1", //索引名
  3.  
    "_type" : "type", //类型名
  4.  
    "_id" : "1", //id
  5.  
    "_version" : 1, //为1表示没有被更新过(每更新一次会 1)
  6.  
    "result" : "created", //created创建状态
  7.  
    "_shards" : {
  8.  
    "total" : 2,
  9.  
    "successful" : 1,
  10.  
    "failed" : 0
  11.  
    },
  12.  
    "_seq_no" : 0,
  13.  
    "_primary_term" : 1
  14.  
    }

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

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

学新通

 执行结果说明

  1.  
    {
  2.  
    "acknowledged" : true,
  3.  
    "shards_acknowledged" : true, //状态成功
  4.  
    "index" : "test2" //索引名
  5.  
    }

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

GET /索引名 

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

学新通

创建时不指定字段类型

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

学新通

3、修改索引

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

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

}

  1.  
    PUT /索引名/[类型名]/文档id
  2.  
    {
  3.  
    "name":"sally",
  4.  
    "age":25,
  5.  
    "birth":"1997-01-05"
  6.  
    }

学新通

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

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

  1.  
    POST /索引名/[类型名]/文档id/_update
  2.  
    {
  3.  
    "doc":{
  4.  
    "name":"sally666"
  5.  
    }
  6.  
    }

学新通

  1.  
    PUT /test3/_doc/1
  2.  
    {
  3.  
    "name":"sally",
  4.  
    "age":25,
  5.  
    "birth":"1997-01-05"
  6.  
    }
  7.  
     
  8.  
     
  9.  
     
  10.  
    POST /test3/_doc/1/_update
  11.  
    {
  12.  
    "doc":{
  13.  
    "name":"sally666"
  14.  
    }
  15.  
    }
学新通

4、删除索引

DELETE /索引名

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

学新通

三、文档的基本操作

1、添加数据

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

{

请求体

}

学新通

  1.  
    PUT demo_learn/_doc/1
  2.  
    {
  3.  
    "name":"jerry",
  4.  
    "age":25,
  5.  
    "desc":"会滑板的程序猿",
  6.  
    "tags":["技术大牛","性格好","暖男"]
  7.  
    }
  8.  
     
  9.  
    PUT demo_learn/_doc/2
  10.  
    {
  11.  
    "name":"max",
  12.  
    "age":25,
  13.  
    "desc":"实力与幸运并存",
  14.  
    "tags":["技术大牛","性格好","暖男"]
  15.  
    }
  16.  
     
  17.  
    PUT demo_learn/_doc/3
  18.  
    {
  19.  
    "name":"jason",
  20.  
    "age":25,
  21.  
    "desc":"灵魂一问",
  22.  
    "tags":["技术大牛","性格好","暖男"]
  23.  
    }
学新通

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" : [
            "技术大牛",
            "性格好",
            "暖男"
          ]
        }
      }
    ]
  }

  1.  
    "hits" : { //索引和文档的信息
  2.  
    "total" : {
  3.  
    "value" : 2, //结果数量
  4.  
    "relation" : "eq"
  5.  
    },
  6.  
    "max_score" : 1.0341108, //文档数据中最大的分值
  7.  
    "hits" : [
  8.  
    {
  9.  
    "_index" : "demo_learn", //索引名
  10.  
    "_type" : "_doc", //文档类型
  11.  
    "_id" : "2", //文档id
  12.  
    "_score" : 1.0341108, //文档数据分值(如果查询结果存在多条,匹配度越高,分值则越高)
  13.  
    "_source" : { //文档数据内容
  14.  
    "name" : "max",
  15.  
    "age" : 25,
  16.  
    "desc" : "实力与幸运并存",
  17.  
    "tags" : [
  18.  
    "技术大牛",
  19.  
    "性格好",
  20.  
    "暖男"
  21.  
    ]
  22.  
    }
  23.  
    },
  24.  
    {
  25.  
    "_index" : "demo_learn",
  26.  
    "_type" : "_doc",
  27.  
    "_id" : "4",
  28.  
    "_score" : 0.542544,
  29.  
    "_source" : {
  30.  
    "name" : "max哈哈哈",
  31.  
    "age" : 25,
  32.  
    "desc" : "实力与幸运并存",
  33.  
    "tags" : [
  34.  
    "技术大牛",
  35.  
    "性格好",
  36.  
    "暖男"
  37.  
    ]
  38.  
    }
  39.  
    }
  40.  
    ]
  41.  
    }
学新通

1、查询索引下的全部

GET 索引名/_search

学新通

2、根据文档id查询 

GET 索引名/_doc/文档id

学新通

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

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

学新通

3、修改数据

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

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

学新通

学新通

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

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

  1.  
    POST /索引名/[类型名]/文档id/_update
  2.  
    {
  3.  
    "doc":{
  4.  
    "需要更新的字段":"内容"
  5.  
    }
  6.  
    }

学新通

4、删除数据

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

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

{
  "query":{
    "match":{

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

  1.  
    POST /索引名/[类型名]/_delete_by_query
  2.  
    {
  3.  
    "query":{
  4.  
    "match":{
  5.  
    "查询的字段":"查询内容"
  6.  
    }
  7.  
    }
  8.  
    }

学新通

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

1、返回数据基本说明 

  1.  
    {
  2.  
    "took" : 0,
  3.  
    "timed_out" : false,
  4.  
    "_shards" : {
  5.  
    "total" : 1,
  6.  
    "successful" : 1,
  7.  
    "skipped" : 0,
  8.  
    "failed" : 0
  9.  
    },
  10.  
    "hits" : {//索引和文档的信息
  11.  
    "total" : {
  12.  
    "value" : 2,//结果数量
  13.  
    "relation" : "eq"
  14.  
    },
  15.  
    "max_score" : 1.0341108,//文档数据中最大的分值
  16.  
    "hits" : [
  17.  
    {
  18.  
    "_index" : "demo_learn_1",//索引名
  19.  
    "_type" : "_doc",//文档类型
  20.  
    "_id" : "3",//文档id
  21.  
    "_score" : 1.0341108,//文档数据分值(如果查询结果存在多条,匹配度越高,分值则越高)
  22.  
    "_source" : {//文档数据内容
  23.  
    "id" : "3",
  24.  
    "name" : "max",
  25.  
    "age" : 25,
  26.  
    "desc" : "实力与幸运并存",
  27.  
    "tags" : [
  28.  
    "技术大牛",
  29.  
    "性格好",
  30.  
    "暖男"
  31.  
    ]
  32.  
    }
  33.  
    },
  34.  
    {
  35.  
    "_index" : "demo_learn_1",
  36.  
    "_type" : "_doc",
  37.  
    "_id" : "4",
  38.  
    "_score" : 0.542544,
  39.  
    "_source" : {
  40.  
    "id" : "4",
  41.  
    "name" : "max哈哈哈",
  42.  
    "age" : 25,
  43.  
    "desc" : "实力与幸运并存",
  44.  
    "tags" : [
  45.  
    "技术大牛",
  46.  
    "性格好",
  47.  
    "暖男"
  48.  
    ]
  49.  
    }
  50.  
    }
  51.  
    ]
  52.  
    }
  53.  
    }
学新通

提前构建一些数据 

  1.  
    PUT demo_learn_1/_doc/1
  2.  
    {
  3.  
    "id" : "1",
  4.  
    "name" : "jerry",
  5.  
    "age" : "28",
  6.  
    "desc" : "会滑板的程序猿,好快乐~~~",
  7.  
    "tags" : [
  8.  
    "技术大牛",
  9.  
    "性格好",
  10.  
    "暖男"
  11.  
    ]
  12.  
    }
  13.  
     
  14.  
    PUT demo_learn_1/_doc/2
  15.  
    {
  16.  
    "id" : "2",
  17.  
    "name" : "jason",
  18.  
    "age" : 27,
  19.  
    "desc" : "灵魂一问",
  20.  
    "tags" : [
  21.  
    "技术大牛",
  22.  
    "性格好",
  23.  
    "暖男"
  24.  
    ]
  25.  
    }
  26.  
     
  27.  
    PUT demo_learn_1/_doc/3
  28.  
    {
  29.  
    "id" : "3",
  30.  
    "name" : "max",
  31.  
    "age" : 25,
  32.  
    "desc" : "实力与幸运并存",
  33.  
    "tags" : [
  34.  
    "技术大牛",
  35.  
    "性格好",
  36.  
    "暖男"
  37.  
    ]
  38.  
    }
  39.  
     
  40.  
    PUT demo_learn_1/_doc/4
  41.  
    {
  42.  
    "id" : "4",
  43.  
    "name" : "max哈哈哈",
  44.  
    "age" : 25,
  45.  
    "desc" : "实力与幸运并存",
  46.  
    "tags" : [
  47.  
    "技术大牛",
  48.  
    "性格好",
  49.  
    "暖男"
  50.  
    ]
  51.  
    }
  52.  
     
  53.  
    PUT demo_learn_1/_doc/5
  54.  
    {
  55.  
    "id" : "5",
  56.  
    "name" : "sally",
  57.  
    "age" : 26,
  58.  
    "desc" : "女神",
  59.  
    "tags" : [
  60.  
    "技术大牛",
  61.  
    "性格好",
  62.  
    "村长"
  63.  
    ]
  64.  
    }
  65.  
     
  66.  
    PUT demo_learn_1/_doc/6
  67.  
    {
  68.  
    "id" : "6",
  69.  
    "name" : "marvin",
  70.  
    "age" : 24,
  71.  
    "desc" : "哦,雪季的快乐",
  72.  
    "tags" : [
  73.  
    "技术大牛",
  74.  
    "性格好",
  75.  
    "滑雪滑雪"
  76.  
    ]
  77.  
    }
学新通

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

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

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

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

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

  1.  
    GET 索引名/_search
  2.  
    {
  3.  
    "query":{
  4.  
    "match":{
  5.  
    "查询的字段":"查询内容"
  6.  
    }
  7.  
    }
  8.  
    }

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

学新通

学新通

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

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

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

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

  1.  
    GET 索引名/_search
  2.  
    {
  3.  
    "query": {
  4.  
    "term": {
  5.  
    "查询的字段":"查询内容"
  6.  
    }
  7.  
    }
  8.  
    }

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": {
           
"查询的字段":"查询内容"
          }
        }
      ]
  }
}
 

学新通

5、返回值控制(_source

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

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

  1.  
    GET 索引名/_search
  2.  
    {
  3.  
    "query": {
  4.  
    "match": {
  5.  
    "查询的字段":"查询内容"
  6.  
    }
  7.  
    },
  8.  
    "_source": ["返回字段1","返回字段2"]
  9.  
    }

学新通

6、查询排序(sort

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

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

7、查询分页(from、size

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

同 MySQL 的 limit 相似

GET 索引名/_search
{

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

学新通

8、高亮查询结果(highlight)

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

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

  1.  
    GET demo_learn_1/_search
  2.  
    {
  3.  
    "query": {
  4.  
    "match": {
  5.  
    "查询的字段":"查询内容"
  6.  
    }
  7.  
    },
  8.  
    "highlight": {
  9.  
    "pre_tags": 标签头,
  10.  
    "post_tags": 标签尾,
  11.  
    "fields": {
  12.  
    "字段名": {}
  13.  
    }
  14.  
    }
  15.  
    }
学新通

默认标签

学新通

自定义标签学新通

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

1、关于分词

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

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

两个类型

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

2、查看分词结果(_analyze)

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

standard:标准分词器

  1.  
    //分词结果(keyword)
  2.  
    GET _analyze
  3.  
    {
  4.  
    "analyzer": "keyword",
  5.  
    "text": ["张三java name"]
  6.  
    }
  7.  
     
  8.  
     
  9.  
    //分词结果(standard)
  10.  
    GET _analyze
  11.  
    {
  12.  
    "analyzer": "standard",
  13.  
    "text": ["张三java name"]
  14.  
    }

学新通

 学新通

3、创建文档规则

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

  1.  
    # 创建文档规则
  2.  
    PUT demo_learn_2
  3.  
    {
  4.  
    "mappings": {
  5.  
    "properties": {
  6.  
    "name":{ //字段名
  7.  
    "type": "text" //字段类型
  8.  
    },
  9.  
    "desc":{
  10.  
    "type": "keyword"
  11.  
    }
  12.  
    }
  13.  
    }
  14.  
    }
  15.  
     
  16.  
     
  17.  
    # 创建数据
  18.  
    PUT demo_learn_2/_doc/1
  19.  
    {
  20.  
    "name":"张三java name",
  21.  
    "desc":"张三java desc"
  22.  
    }
  23.  
     
  24.  
    PUT demo_learn_2/_doc/2
  25.  
    {
  26.  
    "name":"张三java name2",
  27.  
    "desc":"张三java desc2"
  28.  
    }
  29.  
     
学新通

学新通

2、查询结果案例

(1)text类型的检索结果

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

学新通

(2)keyword类型检索结果

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

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgggghj
系列文章
更多 icon
同类精品
更多 icon
继续加载