elasticsearch(ES)的使用

elasticsearch(ES)的使用,第1张

elasticsearch(ES)的使用 1. 下载安装

安装es: 官网下载解压

  • 启动 bin/elasticsearch -d (后台启动)
  • 判断是否成功的标志 curl http://localhost:9200/?pretty
    9200是es的默认端口,可以在config/elasticsearch.yml中修改

启动成功如下图所示:

2. 安装插件
  • head 插件
    head插件是es的一个可视化插件,类似于workbench跟mysql的关系

    进入github head github 按照readme 文件安装,我这里选择的是以谷歌浏览器插件的方式安装,如下图

  • marvel插件
    marvel插件主要是用来监控的,也可以用来当console来使用

  • postman
    用于和es交互,发送请求

3. 入门使用 3.1 基本信息

节点 Node、集群 Cluster 和分片 Shards
ElasticSearch 是分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个实例。单个实例称为一个节点(node),一组节点构成一个集群(cluster)。分片是底层的工作单元,文档保存在分片内,分片又被分配到集群内的各个节点里,每个分片仅保存全部数据的一部分。

索引 Index、类型 Type 和文档 document
如果我们要访问一个文档元数据应该包括囊括 index/type/id 这三种类型

对比 MySQL 数据库:

index → db
type → table
document → row
3.2 创建数据

所有语言可以使用 RESTful API 通过端口 9200 和 Elasticsearch 进行通信。一个 Elasticsearch 请求和任何 HTTP 请求一样由若干相同的部件组成:

curl -X '://:/?' -d ''
  • VERB是 HTTP 方法,可选 : GET、 POST、 PUT、 HEAD 或者 DELETE
  • PROTOCOL 即 http 或者 https
  • HOST Elasticsearch 集群中任意节点的主机名,用 localhost 代表本地机器上的节点
  • PORT 运行 Elasticsearch HTTP 服务的端口号,默认是 9200
  • PATH API 的终端路径(例如 _count 将返回集群中文档数量)Path 可能包含多个组件,例如:_cluster/stats 和 _nodes/stats/jvm
  • QUERY_STRING 任意可选的查询字符串参数 (例如 ?pretty 将格式化地输出 JSON 返回值,使其更容易阅读)
  • BODY 一个 JSON 格式的请求体

将 HTTP 命令PUT新建文档, GET 可以用来检索文档,同样的,可以使用 DELETE 命令来删除文档,以及使用 HEAD 指令来检查文档是否存在。如果想更新已存在的文档,只需再次 PUT

下面使用postman和es来交互进行数据创建和查询:

创建数据
创建员工目录,为每个员工的文档(document)建立索引,每个文档包含了相应员工的所有信息

  1. 每个文档的类型为employee
  2. employee类型归属于索引megacorp
  3. megacorp索引存储在Elasticsearch集群中
PUT /megacorp/employee/3
{
    "first_name" :  "Douglas",
    "last_name" :   "Fir",
    "age" :         35,
    "about":        "I like to build cabinets",
    "interests":  [ "forestry" ]
}

在postman中 *** 作如下

插入三个数据可以使用head插件查看相关信息:

3.3 查询数据

可以通过http get来获信息

GET /megacorp/employee/1

返回

{
  "_index" :   "megacorp",
  "_type" :    "employee",
  "_id" :      "1",
  "_version" : 1,
  "found" :    true,
  "_source" :  {
      "first_name" :  "John",
      "last_name" :   "Smith",
      "age" :         25,
      "about" :       "I love to go rock climbing",
      "interests":  [ "sports", "music" ]
    }
}


_index 索引名称
_type 类型名称
_id id(这个id可以自己指定也可以自动生成)
_version 版本号,每次改动会+1
found true表示在document存在
_source document的全部内容

轻量级搜索
查询字符串

GET /megacorp/employee/_search?q=last_name:Smith

返回

{
    "took": 31,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 2,
            "relation": "eq"
        },
        "max_score": 0.4700036,
        "hits": [
            {
                "_index": "megacorp",
                "_type": "employee",
                "_id": "1",
                "_score": 0.4700036,
                "_source": {
                    "first_name": "John",
                    "last_name": "Smith",
                    "age": 25,
                    "about": "I love to go rock climbing",
                    "interests": [
                        "sports",
                        "music"
                    ]
                }
            },
            {
                "_index": "megacorp",
                "_type": "employee",
                "_id": "2",
                "_score": 0.4700036,
                "_source": {
                    "first_name": "Jane",
                    "last_name": "Smith",
                    "age": 32,
                    "about": "I like to collect rock albums",
                    "interests": [
                        "music"
                    ]
                }
            }
        ]
    }
}


Elasticsearch提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。我们可以这样表示之前关于“Smith”的查询

GET /megacorp/employee/_search
{
    "query" : {
        "match" : {
            "last_name" : "Smith"
        }
    }
}


过滤器
更复杂的搜索,使用过滤器(filter)来实现sql中where的效果,比如:你想要搜索一个叫Smith,且年龄大于30的员工,可以这么检索.

{
    "query": {
        "bool": {
            "filter": {
                "range": {
                    "age": {
                        "gt": 30
                    }
                }
            },
            "must": {
                "match": {
                    "last_name": "Smith"
                }
            }
        }
    }
}


短语搜索

GET /megacorp/employee/_search
{
    "query" : {
        "match_phrase" : {
            "about" : "rock climbing"
        }
    }
}

match_phrase与match的区别在于,前者会把rock climbing(搜索条件)作为一个整体,而后者会命中rock balabala climbing(后者只要命中其中一个词就算命中,比如rock climbing中命中rock就算匹配中了,就会返回结果)

参考

官方文档
知乎-Elasticsearch【快速入门】
简书-Elasticsearch入门语法

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5690328.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存