zoukankan      html  css  js  c++  java
  • ElasticSearch常用命令

    今天敲了一遍常用命令,发现还是会忘。。。

    1.创建索引

    PUT users
    {
      "mappings": {
        "properties": {
          "name":{
            "type": "keyword"
          },
          "age":{
            "type": "integer"
          },
          "remark":{
            "type": "text"
          }
        }
      }
    }
    

    2.添加索引结构

    PUT users/_mapping
    {
      "properties": {
          "content1":{
            "type": "keyword"
          },
          "content2":{
            "type": "keyword"
          }
      }
    }
    

    3.查看索引结构

    GET users
    

    4.删除索引

    DELETE users
    

    以上是索引的基本操作命令

    5.添加(文档)数据

    PUT users/_doc/1
    {
      "age":15,
      "name":"张三的名字叫张三",
      "remark":"张三的备注",
      "content":"张三的content"
    }
    

    6.根ID获得文档数据

    GET users/_doc/1
    

    7.根据ID修改文档数据(PUT方式,不推荐)

    PUT users/_doc/1
    {
      "age":16
    }
    

    8.根据ID修改文档数据(post方式,推荐)

    POST users/_doc/1
    {
      "doc":{
        "age":15,
        "name":"张三的名字",
        "remark":"张三的备注"
      }
    }
    

    9.根据ID删除

    DELETE users/_doc/1
    

    以上是文档的基本操作命令

    多创建一些文档,方便下面的复杂查询

    PUT users/_doc/2
    {
      "age":16,
      "name":"李四的名字叫李四",
      "remark":"李四的备注",
      "content":"李四的content"
    }
    PUT users/_doc/3
    {
      "age":17,
      "name":"王五的名字叫王五",
      "remark":"王五的备注",
      "content":"王五的content"
    }
    PUT users/_doc/4
    {
      "age":18,
      "name":"赵六的名字叫赵六",
      "remark":"赵六的备注",
      "content":"赵六的content"
    }
    PUT users/_doc/5
    {
      "age":18,
      "name":"阿三的名字叫赵六",
      "remark":"阿三的备注",
      "content":"阿三的content"
    }
    

    10.单一字段查询,如果查询字段类型都具备(方式一)

    GET users/_doc/_search?q=name:张三#如果是自动创建的索引,文本的字段会同时创建两种类型,textkeyword,按照这个查询方式查询,会先将name进行分词后查询
    GET users/_doc/_search?q=name.keyword:张三#按照这个查询方式查询,不会先将name进行分词直接查询
    

    11.单一字段查询(方式二)

    GET users/_doc/_search
    {
      "query":{
        "match":{
          "remark":"备注" 按照这个查询方式查询,会先将name进行分词后查询
          #"remark.keyword":"李0的备注"  按照这个查询方式查询,不会先将name进行分词直接查询
        }
      }
    }
    

    12.term(精确搜索)查询

    如果字段是手动指定的text,则查不出来,如果是自动创建的,可以使用"age.keyword":15查询

    GET users/_doc/_search
    {
      "query":
      {
        "term":{
          "age":15
        }
      }
    }
    

    以上是文档一个字段查询的基本操作命令

    下面是多字段查询

    13.must(and查询),可理解为 select * from users where remark like '%备注%' and age like '%15%'

    其中下面用到的term和match可以根据需求变换

    GET users/_doc/_search
    {
      "query":{
        "bool":{
          "must":[
            {
              "term":
              {
                "name":"张三的名字叫张三"
              }
            } , 
             {
              "match":
              {
                "age":"15"
              }
            }
          ]
        }
      }
    }
    

    14. should(or查询)可理解为 select * from users where remark = '备注' or age = '15'

    GET users/_doc/_search
    {
      "query":{
        "bool":{
          "should":[
            {
              "term":{
                "name":"张三的名字叫张三"
              }
            },
            {
              "term":{
                "age":16
              }
            }
          ]
        }
      }
    }
    

    15. must_not(!=)可理解为 select * from users where remark != '备注' and age != '15'

    GET users/_doc/_search
    {
      "query":{
        "bool":{
          "must_not": [
            {
              "term":{
                "name":"张三的名字叫张三"
              }
            },
            {
              "term":{
                "age":17
              }
            }
          ]
        }
      }
    }
    

    16.区间查询 理解理解为 select * from users where remark like '%李四%' and age >=16 and age <=17

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

    GET users/_doc/_search
    {
      "query":{
        "bool":{
          "must":{
            "match":{
              "remark":"李四"
            }
          },
          "filter":{
            "range":{
              "age":{
                "gte":16,
                "lte":17
              }
            }
          }
        }
      }
    }
    

    17.指定返回某些字段

    GET users/_doc/_search
    {
      "_source":["age"]
    }
    

    18.排序 同事搜索“的备注”、“张三”,并先按照age字段降序,再按照_score分值字段降序排列

    GET users/_doc/_search
    {
      "query":{
        "bool":{
          "must":{
            "match":{
              "remark":"的备注 张三"
            }
          }
        }
      },
      "sort":[
        {
          "age":"desc"
        },
        {
          "_score":"desc"
        }
      ]
    }
    

    19.高亮

    pre_tags:为查找的关键字添加自定义的html代码前缀
    post_tags:为查找的关键字添加自定义的html代码后缀
    fields:定义要高亮的字段

    GET users/_doc/_search
    {
      "query":{
        "bool":{
          "must":[
            {
              "match":{
                "remark":"的备注"
              }
            },
            {
              "match":{
                "content":"张三"
              }
            }
          ]
        }
      },
      "highlight":{
        "pre_tags":"<mytag style='color:red'>",
        "post_tags":"</mytag>",
        "fields":[
          {
            "remark":{}
          },
          {
            "content":{}
          }
        ]
      }
    }
    

    20.分页查询

    from:从第几条数据开始(>关系,非>=)
    size:查询几条数据

    GET users/_doc/_search
    {
      "from:":2,
      "size":2
    }
    

    其他:查看索引的相关信息

    可以查出来每个索引使用的空间大小,记录数等信息

    GET _cat/indices?v
    
  • 相关阅读:
    抽象工厂模式
    观察者模式
    建造者模式
    外观模式
    drf 之路由
    drf之视图
    drf--请求和响应
    def--序列化
    drf之restful规范
    Tepora使用
  • 原文地址:https://www.cnblogs.com/rb2010/p/13045292.html
Copyright © 2011-2022 走看看