为了账号安全,请及时绑定邮箱和手机立即绑定

ElasticSearch入门

难度中级
时长 1小时45分
学习人数
综合评分94.3
78人评价 查看评价
9.6 内容实用
9.3 简洁易懂
9.4 逻辑清晰
  • 高级查询


    子条件查询:特定字段查询所指特定值

    Query context:

    Filter context:在查询过程中,只判断该文档是否满足条件,只有yes或者no


    复合条件查询:以一定的逻辑组合子条件查询

    • 固定分数查询,不支持match,只支持filter

    post 127.0.0.1:9200/_search

    固定分数为2

    {

    "query":{

    "constant_score":{

    "filter":{

    "match":{

    "title":"ElasticSearch"

    }

    },

    "boost":2

    }

    }

    }


    • 布尔查询

    1. should: 两个条件是或的关系

    {

    "query":{

    "bool":{

    "should":[

    {

    "match":{

    "author":"loistein"

    }

    },

    {

    "match":{

    "title":"ElasticSearch"

    }

    }

    ]

    }

    }

    }


        2. must:两个条件是与的逻辑

    {

    "query":{

    "bool":{

    "must":[

    {

    "match":{

    "author":"loistein"

    }

    },

    {

    "match":{

    "title":"ElasticSearch"

    }

    }

    ]

    }

    }

    }



    {

    "query":{

    "bool":{

    "must":[

    {

    "match":{

    "author":"loistein"

    }

    },

    {

    "match":{

    "title":"ElasticSearch"

    }

    }

    ],

    "filter":[

    {

    "term":{

    "word_count":1000

    }

    }

    ]

    }

    }

    }


        3. must_not

    {

    "query":{

    "bool":{

    "must_not":{

    "term":{

    "author":"loistein"

    }

    }

    }

    }

    }


  • 高级查询


    1. 子条件查询:特定字段查询所指特定值

    • Query context:

    • Filter context:在查询过程中,只判断该文档是否满足条件,只有yes或者no

        会缓存,结果比较快一些

        post 127.0.0.1:9200/book/_search

    {

    "query":{

    "bool":{

    "filter":{

    "word_count":1000

    }

    }

    }

    }


        2. 复合条件查询:以一定的逻辑组合子条件查询


  • 高级查询


    子条件查询:特定字段查询所指特定值

        Query context:

            在查询过程中,除了判断文档是否满足查询条件外,ES还会计算一个_socre来标识匹配的程度,旨在判断文档和查询条件匹配的有多好。

        常用查询:

        全文本查询:针对文本类型数据

    •     模糊匹配:

    post 127.0.0.1:9200/book/_search

    {

    "query":{

    "match":{

    "author":"loistein"

    }

    }

    }


    匹配ElasticSearch和入门两个词语

    {

    "query":{

    "match":{

    "title":"ElasticSearch入门"

    }

    }

    }


    • 习语匹配,匹配"ElasticSearch入门":

    {

    "query":{

    "match_phrase":{

    "title":"ElasticSearch入门"

    }

    }

    }


    • 多个字段匹配

    {

    "query":{

    "multi_match":{

    "query":"loistein",

    "fields":["author","title"]

    }

    }

    }


    • 语法查询:

    {

    "query":{

    "query_string":{

    "query":"(ELasticSearch AND 大发) OR Python"

    }

    }

    }


    {

    "query":{

    "query_string":{

    "query":"Loistein OR ELasticSearch",

    "fields":["title","author"]

    }

    }

    }


        字段级别查询:针对结构化数据,如数字、日期等

    {

    "query":{

    "term":{

    "word_count":"1000"

    }

    }

    }


    • 指定范围查询

    {

    "query":{

    "range":{

    "word_count":{

    "gte":1000,

    "let":2000

    }

    }

    }

    }


    {

    "query":{

    "range":{

    "publish_date":{

    "gte":"2018-01-01",

    "let":"now"

    }

    }

    }

    }


    Filter context:


    复合条件查询:以一定的逻辑组合子条件查询


  • 查询


    简单查询

    GET 127.0.0.1:9200/book/novel/1


    条件查询

    POST 127.0.0.1:9200/book/_search

    返回所有

    {

    "query":{

    "match_all":{}

    }

    }



    返回第几条到第几条数据

    {

    "query":{

    "match_all":{}

    },

    "from":1,

    "size":1

    }


    关键字查询:

    {

    "query":{

    "match":{

    "title":"ElasticSearch"

    }

    }

    }


    指定排序规则:

    {

    "query":{

    "match":{

    "title":"ElasticSearch"

    }

    },

    "sort":[

    {"publish_date":{"order":"desc"}}

    ]

    }


    聚合查询

    按照列名称聚合

    {

    "aggs":{

    "group_by_word_count":{

    "terms":{

    "field":"word_count"

    }

    },

    "group_by_publish_date":{

    "terms":{

    "field":"publish_date"

    }

    }

    }

    }


    返回统计值,比如最大、最小、平均值

    {

    "aggs":{

    "grades_word_count":{

    "stats":{

    "field":"word_count"

    }

    }

    }

    }



    返回最小值

    {

    "aggs":{

    "grades_word_count":{

    "min":{

    "field":"word_count"

    }

    }

    }

    }


  • 删除


    删除文档

    选择delete方法

    127.0.0.1:9200/people/man/1


    删除索引

    动作>删除

    选择delete方法 127.0.0.1:9200/people


  • 修改数据


    直接修改文档

    post方法

    127.0.0.1:9200/people/man/1/_update

    {

    "doc":{

    "name":"谁是lois"

    }

    }


    脚本修改文档

    post方法

    127.0.0.1:9200/people/man/1/_update

    {

    "script":{

    "lang":"painless",

    "inline":"ctx._source.age += 10"

    }

    }



    {

    "script":{

    "lang":"painless",

    "inline":"ctx._source.age = params.age",

    "params":{

    "age":100

    }

    }

    }


  • 插入数据


    指定文档id插入,使用put方法

    127.0.0.1:9200/people/man/1

    people是索引,man是类型,1是id

    {

    "name":"lois",

    "country":"china",

    "age":30,

    "date":"1999-01-01"

    }



    自动产生文档id插入,使用post方法

    127.0.0.1:9200/people/man/

    people是索引,man是类型,不指定id

    {

    "name":"lois",

    "country":"china",

    "age":30,

    "date":"1999-01-01"

    }


  • 基本用法


    RESTFul API

    API基本格式:http://ip:port/索引/类型/文档id

    常用http动词:GET/POST/PUT/DELETE


    创建索引

    索引名称:小写,不能有中划线

    非结构化创建:mappings为空

    结构化创建:

    127.0.0.1:9200/people

    {

        "settings": {

            "number_of_shards": 3,

            "number_of_replicas": 1

        },

        "mappings": {

            "properties": {

                "name": {

                    "type": "text"

                },

                "country": {

                    "type": "keyword"

                },

                "age": {

                    "type": "integer"

                },

                "date": {

                    "type": "date",

                    "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_mills"

                }

            }

        },

        "woman": {}

    }


  • 集群和节点


    基础概念:

    索引:含有相同属性的文档集合,相当于database

    类型:索引可以定义一个或多个类型,文档必须属于一个类型,相当于table

    文档:文档是可以被索引的基本数据单位,相当于record


    分片:每个索引都有多个分片,每个分片是一个Lucene索引

    备份:拷贝一份分片就完成了分片的备份

    ES索引默认5个分片,分片指定后不可以修改,备份数可以修改

  • 修改配置,将节点变成master

    • vim config/elasticsearch.yml

            cluster.name: loistein #指定集群名字

            node.name: master #指定节点名字

            node.master: true #告诉他自己就是master节点

            network.host: 127.0.0.1 #绑定IP,端口不做修改,默认9200

    • 重启服务:./bin/elasticsearch -d

    • 检查服务:

        localhost:9100 当前节点名字:master

        localhost:9200,cluster_name: master


    配置slave节点:

    • 新建slave节点目录

    • 拷贝elasticsearch包到新目录

    • 修改配置

        vim config/elasticsearch.yml

            cluster.name: loistein #指定集群名字

            node.name: slave1 #指定节点名字

            network.host: 127.0.0.1 #绑定IP

            http.port: 8200 #配置端口号,避免和master冲突

            discovery.zen.ping.unicast.hosts: ["127.0.0.1"]#指定集群,否则是孤魂野鬼

    • 启动服务:./bin/elasticsearch -d

    • 检查服务:

        localhost:9100 当前节点名字:master,新增slave1

        localhost:9200 cluster_name: master


    再添加slave2

    • Head插件:ES返回的是json结构,不友好,插件提供了友好的界面

    • 下载: github搜索 Elasticsearch head

    • 解压:unzip master.zip

    • 检查node环境:node -v (要求大于等于6.0)

    • 安装:npm install

    • 启动:npm run start

    • 服务:localhost:9100 

    • 修改配置:进行跨域配置修改

        vim config/elasticsearch.yml: 最后加
        http.cors.enabled: true

        http.cors.allow-origin: "*"

    • 启动elastic search: ./bin/elasticsearch -d 后台启动

    • 启动head插件

    • 刷新localhost:9100:状态从未连接-> green

    • 状态说明:

            green : es连接状态正常,健康

            yellow: 集群不健康但是可以使用

            red: 不健康,有丢失数据的问题

  • 学习记录

    6-5 更新接口开发

  • es head 启动命令 npm run start

首页上一页1234567下一页尾页

举报

0/150
提交
取消
课程须知
熟悉maven构建项目,了解RESTful和Spring Boot的基本知识
老师告诉你能学到什么?
ElasticSearch的基本概念,学习ElasticSearch的服务搭建,了解ElasticSearch的常用技巧
意见反馈 邀请有奖 帮助中心 APP下载
官方微信