新手向-ES初入门

118 阅读3分钟

ES

Restful风格

GET PUT DELETE POST HEAD 等

返回的是json形式的数据

幂等性

幂等性:就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。

数据格式

ES是面向文档型的数据库,一条数据就是一个文档,所以大多数操作都是对文档的操作。 ES里面有几个主要的概念,索引(index),文档(document),字段(fields)。 这里用MySQL进行一个类比, 索引相当于MySQL的数据库、 文档相当于MySQL的行、 字段相当于MySQL的列。

操作方式

这里只讲原生的,不用什么框架之类的,框架之后再写(/doge)。 原生对ES的操作都是基于Restful风格的request请求,不同的请求方式有不同的效果。 比如查询就用get,操作用put或者post等

倒排索引

正排索引:根据key查value

倒排索引:根据value查key

索引

创建:http://127.0.0.1:9200/[索引名称] PUT方式

获取指定索引:http://127.0.0.1:9200/[索引名称] GET方式

获取所有索引:http://127.0.0.1:9200/_cat/indices?v GET方式

删除索引:http://127.0.0.1:9200/[索引名称] DELETE方式

文档

创建:http://127.0.0.1:9200/[索引名称]/_doc(或者__create) POST 方式

创建:http://127.0.0.1:9200/[索引名称]/_doc/[自定义的ID] POST 方式 非幂等

查询指定id:http://127.0.0.1:9200/[索引名称]/_doc/[id] GET

查询索引下的所有数据:http://127.0.0.1:9200/shopping/_search GET

完全覆盖修改:http://127.0.0.1:9200/shopping/_doc/1111 PUT 幂等性 修改内容在body

局部数据修改:http://127.0.0.1:9200/shopping/_update/1111 POST 非幂等

{
    "doc":{
        "title":"huawei"
    }
}

删除指定数据:http://127.0.0.1:9200/shopping/_doc/[指定ID] DELETE方式

查询

指定查询1:http://127.0.0.1:9200/shopping/_search?q=type:2x q=[key]:[value]

指定查询2:http://127.0.0.1:9200/shopping/_search GET 内置请求体

{
    "query":{
        "match":{
            "type":"2x"
        }
    }
}

全量查询:http://127.0.0.1:9200/shopping/_search GET 内置请求体

 {    "query":
  {       
     "match_all":{           
         
     }   
 }
 }

分页查询:http://127.0.0.1:9200/shopping/_search GET FROM:起始数 SIZE:每页的个数

{
    "query":{
        "match_all":{
           
        }
    },
    "from":2,
    "size":1
}

显示指定属性:http://127.0.0.1:9200/shopping/_search GET FROM:起始数 SIZE:每页的个数 _SOURCE:中括号里面加要显示的信息

{
    "query":{
        "match_all":{
           
        }
    },
    "from":2,
    "size":1,
    "_source":["title"]
}

排序:http://127.0.0.1:9200/shopping/_search GET “price”=“[要排序的属性]”,“order”:正序还是倒序

{
    "query":{
        "match_all":{
           
        }
    },
    "from":2,
    "size":1,
    "_source":["title"],
    "sort":{
        "price":{
            "order":"desc"
        }
    }
}

多条件查询:http://127.0.0.1:9200/shopping/_search GET MUST:AND SHOULD:OR FILTER:添加查询范围 GT:大于

{
    "query":{
        "bool":{
            "must":[
                {
                    "match":{
                        "type":"2x"
                    }
                },
                {
                    "match":{
                        "title":"xiaomi"
                    }
                }
            ],
            "filter":{
                "range":{
                    "price":{
                        "gt":5000
                    }
                }
            }
        }
    }
}

全文检索:http://127.0.0.1:9200/shopping/_search GET

{
    "query":{
        "match":{
            "title":"小米"---会查询出包含小和米的所有匹配项  分词查询
        }
    }
}

精确匹配:http://127.0.0.1:9200/shopping/_search GET

{
    "query":{
        "match_phrase":{
            "title":"小米"---精确查询
        }
    }
}

聚合查询:http://127.0.0.1:9200/shopping/_search GET

{
    "aggs":{//聚合操作
       "price_group":{//名称,可以随意起名字
           "terms":{//分组
               "field":"price"//分组字段
           }
       }         
    }
}

求平均值:http://127.0.0.1:9200/shopping/_search GET

{
    "aggs":{//聚合操作
       "price_avg":{//名称,可以随意起名字
           "avg":{//均值
               "field":"price"//求均值字段 
           }
       }         
    }
}

映射关系

创建映射:http://127.0.0.1:9200/user/_mapping PUT

{
    "properties":{
        "name":{
            "type":"text",//格式为text可以进行分词查询
            "index":true   //true可以用来进行索引查询
        },
        "sex":{
            "type":"keyword",//格式为keyword说明不可以分词,进行全词匹配
            "index":true   //true可以用来进行索引查询
        },
        "tel":{
            "type":"keyword",//格式为keyword说明不可以分词,进行全词匹配
            "index":false   //false说明不用来进行索引查询
        }
    }
}

查询映射:http://127.0.0.1:9200/user/_mapping GET

到此基本中的基本就差不多了,其他下回分晓!

今天就先说这么多!