美文网首页WEB
ElasticSearch 01 基础概念及基本操作

ElasticSearch 01 基础概念及基本操作

作者: 我问你瓜保熟吗 | 来源:发表于2019-05-07 18:01 被阅读12次

    ElasticSearch 01 基础概念及基本操作

    ElasticSearch 02 与SpringBoot2.x集成进行增删改查

    ElasticSearch 03 全文检索功能实现

    一、 基础概念


    • index:是ES的顶层管理单位,相当于一个数据库。查看所有索引的命令:GET 'http://localhost:9200/_cat/indices'
    • type:index里的虚拟的逻辑分组,类似于一个表用来过滤 Document(ES7.0被去掉)。
    • document: Index 里面单条的JSON格式记录称为 Document(文档),许多条 Document 构成了一个 Index。
    • 分片:每个索引都有多个分片,每个分片是一个Lucene索引
    • 备份:复制一个分片就完成了分片的备份
    • API基本格式:
      http://<ip>:<port>/<索引><类型><文档id>
    • 常用HTTP动词:
      GET/PUT/POST/DELETE

    索引的基本操作


    • 创建索引
    PUT  127.0.0.1:9200/people
    {
        "settings": {
            "number_of_shards": 3,
            "number_of_replicas": 1
        },
        "mappings": {
            "man": {
                "properties": {
                    "name": {
                        "type":"text"
                    },
                    "country": {
                        "type":"keyword"
                    },
                    "age": {
                        "type":"integer"
                    },
                    "date": {
                        "type": "date",
                        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
                    }
                }
            },
            "worman": {}
        }
    }
    
    • 删除索引
    DELETE  127.0.0.1:9200/people
    
    • 插入数据
    PUT  localhost:9200/people/man/1 
    {
        "name": "瓦力",
        "country": "China",
        "age": "26",
        "date": "1999-01-02"
    }
    

    使用POST可以省略id 1,让系统自动生成一个字符串id

    • 修改数据
    POST localhost:9200/people/man/1/_update
    {
        "doc": {
            "name": "我是瓦力"
        }
    }
    
    • 删除数据
    DELETE  127.0.0.1:9200/people/man/1
    
    • 查询ES信息
    curl -Xget localhost:9200
    
    • 查询索引信息
    curl -Xget localhost:9200/book?pretty=true
    
    • 全文搜索
    POST 127.0.0.1:9200/_search
    
    • 查询指定索引的所有记录
    POST 127.0.0.1:9200/book/_search
    
    • 查询指定id的记录信息
    GET  127.0.0.1:9200/book/novel/1
    
    • 给非结构化索引book添加类型和映射
    POST 127.0.0.1:9200/book/novel/_mappings
    
    {
      "novel": {   
        "properties": {
          "title": {
            "type": "text"
          }
        }
      }
    }
    

    关键词_mappings 添加映射
    novel 类型前缀

    高级查询


    • 一、子条件查询:特定字段查询所指特定值
      1、Query context:ES会计算一个_score来表示匹配的程度,旨在判断目标文档和查询条件匹配的有多好
      1.1、全文本查询:针对文本类型数据的查询,包含模糊匹配、短语匹配、多字段匹配、语法查询
      模糊匹配:关键词match
    127.0.0.1:9200/book/_search
    {
        "query": {
            "match":{
                "author":"金庸"
            }
        }
    }
    

    习语/短语匹配:关键词match_phrase

    127.0.0.1:9200/book/_search
    {
        "query": {
            "match_phrase":{
                "author":"java入门"
            }
        }
    }
    

    多字段匹配:关键词multi_match

    127.0.0.1:9200/book/_search
    {
        "query": {
            "multi_match":{
                "author":"金庸",
                "fields":["auth","title"]
            }
        }
    }
    

    语法匹配:关键词query_string

    127.0.0.1:9200/book/_search
    {
        "query": {
            "query_string":{
                "query":"(java AND good) OR Python",
                    "fields": ["title", "author"]
    
            }
        }
    }
    

    字段级别查询:针对结构化数据,如数字,日期等
    语法匹配:关键词term

    127.0.0.1:9200/book/_search
    {
        "query": {
            "term":{
                "author":"古龙"
            }
        }
    }
    

    字段级别的范围查询

    127.0.0.1:9200/book/_search
    {
        "query": {
            "range":{
                "word_count": {
                           "gte": 1000,
                           "lte": 2000
                     }
            }
        }
    }
    

    2、Filter context ,只判断是否满足条件,只有yes或no; 会对结果进行缓存,速度较快

    127.0.0.1:9200/book/_search
    {
        "query": {
            "bool":{
                "filter": {
                   "term": {
                           "word_count": 1000
                   }
               }
            }
        }
    }
    
    • 二、复合条件查询:以一定的逻辑组合子条件查询
    • 二、索引


    索引名规范

    • 仅限小写字母
    • 不能包含\、/、 *、?、"、<、>、|、#以及空格符等特殊符号
    • 从7.0版本开始不再包含冒号
    • 不能以-、_或+开头
    • 不能超过255个字节(注意它是字节,因此多字节字符将计入255个限制)

    索引配置

    PUT blog
    {
        "settings" : {
            "index" : {
                "number_of_shards" : 2,
                "number_of_replicas" : 2
            }
        }
    }
    或:
    PUT blog
    {
        "settings" : {
            "number_of_shards" : 2,
            "number_of_replicas" : 2
        }
    }
    

    索引操作

    • 命令新增一条索引:curl -X PUT localhost:9200/user
    • 查询索引:curl -X GET localhost:9200/user

    ?pretty=true 是用来美化输出的json内容格式,可以添加在user后

    • 删除索引:curl -X DELETE localhost:9200/user
    • 返回当前节点的索引索引:curl -X GET http://localhost:9200/_cat/indices?v

    .kibana_1是Kibana自带样例索引

    • 查看索引配置:curl -X GET localhost:9200/blog/_settings?pretty=true
    • 关闭索引:curl -X POST localhost:9200/blog/_close
    • 关闭索引:curl -X POST localhost:9200/blog/_open

    索引的种类

    • 非结构化索引
      mappings为空就是非结构话索引
    • 结构化索引
      mappings:{}不为空的索引

    三、文档


    文档使用json格式表示:

    curl -X PUT localhost:9200/megacorp/employee/1' -d 
    {
        "first_name" : "John",
        "last_name" :  "Smith",
        "age" :        25,
        "about" :      "I love to go rock climbing",
        "interests": [ "sports", "music" ]
    }'
    

    megacorp:索引名称
    employee:类型名称(ES7不支持type?)
    1:特定雇员的ID

    curl命令 发送表单信息有 GET 和 POST 两种方法。默认为GET方法 ,只要把数据附在网址后面就行curl example.com/form.cgi?data=xxx。POST 方法必须把数据和网址分开,curl 要用到 --data 或者 -d 参数。curl 默认的 HTTP 动词是 GET,使用 -X 参数可以支持其他动词。curl -X POST -d "data=xxx" www.example.com/form.cgi GET和POST或DELETE等动词必须大写。

    • 查看一个文档:Get 'http://localhost:9200/film/dongzuo/1
    • 删除一个文档:DELETE 'http://localhost:9200/film/dongzuo/1

    相关文章

      网友评论

        本文标题:ElasticSearch 01 基础概念及基本操作

        本文链接:https://www.haomeiwen.com/subject/yxjyoqtx.html