当前位置:   article > 正文

Elasticsearch(一)基本语法命令_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风格说明

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

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

{

请求体

}

 执行结果说明

  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. POST /test3/_doc/1/_update
  8. {
  9. "doc":{
  10. "name":"sally666"
  11. }
  12. }

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. PUT demo_learn/_doc/2
  9. {
  10. "name":"max",
  11. "age":25,
  12. "desc":"实力与幸运并存",
  13. "tags":["技术大牛","性格好","暖男"]
  14. }
  15. PUT demo_learn/_doc/3
  16. {
  17. "name":"jason",
  18. "age":25,
  19. "desc":"灵魂一问",
  20. "tags":["技术大牛","性格好","暖男"]
  21. }

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

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. //分词结果(standard)
  8. GET _analyze
  9. {
  10. "analyzer": "standard",
  11. "text": ["张三java name"]
  12. }

 ​

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. PUT demo_learn_2/_doc/1
  17. {
  18. "name":"张三java name",
  19. "desc":"张三java desc"
  20. }
  21. PUT demo_learn_2/_doc/2
  22. {
  23. "name":"张三java name2",
  24. "desc":"张三java desc2"
  25. }

2、查询结果案例

(1)text类型的检索结果

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

(2)keyword类型检索结果

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/492722
推荐阅读
相关标签
  

闽ICP备14008679号