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风格说明

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

methodURL地址描述
PUTlocalhost:9200/索引名称/类型名称/文档id创建文档(指定文档id)
POSTlocalhost:9200/索引名称/类型名称创建文档(随机文档id)
POSTlocalhost:9200/索引名称/类型名称/文档id/_update修改文档
DELETElocalhost:9200/索引名称/类型名称/文档id删除文档
GETlocalhost:9200/索引名称/类型名称/文档id查询文档-通过文档id
POSTlocalhost:9200/索引名称/类型名称/文档id/_search查询所有数据

elasticsearch工具自带命令

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

GET _cat/indices?v

二、索引的基本操作

1、创建索引 

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

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

{

请求体

}

 执行结果说明

{
  "_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

 执行结果说明

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

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

GET /索引名 

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

创建时不指定字段类型

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

3、修改索引

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

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

}

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

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

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

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

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



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

4、删除索引

DELETE /索引名

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

三、文档的基本操作

1、添加数据

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

{

请求体

}

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

2、根据文档id查询 

GET 索引名/_doc/文档id

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

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

3、修改数据

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

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

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

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

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

4、删除数据

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

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

{
  "query":{
    "match":{

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

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

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

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

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

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

5、返回值控制(_source

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

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

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

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": {
      "
字段名": {}
    }
  }
}

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

默认标签

自定义标签

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

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"]
}

 ​

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"
}

2、查询结果案例

(1)text类型的检索结果

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

(2)keyword类型检索结果

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

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值