【ES】ES 基础入门01

ES (ElasticSearch) 基础入门01

资料

在线手册

工具组合ES(检索后台)+ kibana(交互前端)

部署

参考官网部署

启动

  • 启动ES
./bin/elasticsearch
#浏览器访问
IP:9200
  • 启动kibana
./bin/kibana
#浏览器访问
IP:5601/app/kibana

入门操作

基本操作方式

  • 标准方式
curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
  • VERB: 适当的 HTTP 方法 或 谓词 : GETPOSTPUTHEAD 或者 DELETE
  • PROTOCOL: http 或者 https(如果你在 Elasticsearch 前面有一个https 代理)
  • HOST: Elasticsearch 集群中任意节点的主机名,或者用 localhost 代表本地机器上的节点。
  • PORT: 运行 Elasticsearch HTTP 服务的端口号,默认是 9200 。
  • PATH: API 的终端路径(例如 _count 将返回集群中文档数量)。Path 可能包含多个组件,例如:_cluster/stats 和 _nodes/stats/jvm 。
  • QUERY_STRING: 任意可选的查询字符串参数 (例如 ?pretty 将格式化地输出 JSON 返回值,使其更容易阅读)
  • BODY: 一个 JSON 格式的请求体 (如果请求需要的话)
curl -XGET 'http://localhost:9200/_count?pretty' -d '
{
    "query": {
        "match_all": {}
    }
}
'
# 显示信息头 -i
curl -i -XGET 'localhost:9200/'
  • 缩略方式
# 缩略请求(kibana中使用该方式)
GET /_count
{
    "query": {
        "match_all": {}
    }
}

文档操作

  • 添加文档
  • 每个雇员索引一个文档,包含该雇员的所有信息。
  • 每个文档都将是 employee 类型 。
  • 该类型位于 索引 megacorp 内。
  • 该索引保存在我们的 Elasticsearch 集群中。
# megacorp:索引名称
# employee:类型名称
# 1:特定雇员的ID
PUT /megacorp/employee/1
{
    "first_name" : "John",
    "last_name" :  "Smith",
    "age" :        25,
    "about" :      "I love to go rock climbing",
    "interests": [ "sports", "music" ]
}
  • 检索文档

HTTP GET 请求并指定文档的地址——索引库、类型和ID。

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" ]
  }
}
  • 删除文档
DELETE /megacorp/employee/1 

搜索

  • 简易搜索(Query-string)

Query-string 轻量搜索

# 搜索所有雇员
GET /megacorp/employee/_search
# 查询字符串 (_query-string_) 搜索
# 请求路径中使用 _search 端点,并将查询本身赋值给参数 q=
GET /megacorp/employee/_search?q=last_name:Smith
  • 表达式搜索(查询表达式)

领域特定语言 (DSL), 指定了使用一个 JSON 请求。我们可以像这样重写之前的查询所有 Smith 的搜索

GET /megacorp/employee/_search
{
    "query" : {
        "match" : {
            "last_name" : "Smith"
        }
    }
}
  • 复杂搜索
关键字 意义
bool ???
must ???
match 匹配
filter 过滤
range 排序
gt 大于

搜索姓氏为 Smith 的雇员,但这次我们只需要年龄大于 30 的

GET /megacorp/employee/_search
{
  "query":{
    "bool":{
      "must":{
        "match":{
          "last_name": "smith"
        }
      },
      "filter":{
        "range":{
          "age":{"gt": 30}
        }
      }
    }
  }
}
  • 全文搜索

搜索下所有喜欢攀岩(rock climbing)的雇员

# 请求
GET /megacorp/employee/_search
{
    "query" : {
        "match" : {
            "about" : "rock climbing"
        }
    }
}
# 返回结果部分截取
{
   ...
   "hits": {
      "total":      2,
      "max_score":  0.16273327,
      "hits": [
         {
            ...
            "_score":         0.16273327, 
            "_source": {
               "first_name":  "John",
               "last_name":   "Smith",
               "age":         25,
               "about":       "I love to go rock climbing",
               "interests": [ "sports", "music" ]
            }
         },
         {
            ...
            "_score":         0.016878016, 
            "_source": {
               "first_name":  "Jane",
               "last_name":   "Smith",
               "age":         32,
               "about":       "I like to collect rock albums",
               "interests": [ "music" ]
            }
         }
      ]
   }
}
  • 搜索结果中包含相关性信息,上述结果中的_score字段就是相关性的指标。
  • 这是完全区别于传统关系型数据库的一个概念,数据库中的一条记录要么匹配要么不匹配。
  • 短语搜索
关键字 用途
match_phrase 匹配短语

用于精确匹配一系列单词或者短语,如精确搜索相同形式和内容的“rock climbing” 匹配同时包含 “rock” 和 “climbing” ,并且 二者以短语 “rock climbing” 的形式紧挨着的雇员记录

GET /megacorp/employee/_search
{
    "query" : {
        "match_phrase" : {
            "about" : "rock climbing"
        }
    }
}
  • 高亮搜索
关键字 用途
hightlight 高亮显示

匹配同时包含 “rock” 和 “climbing” ,并且 二者以短语 “rock climbing” 的形式紧挨着的雇员记录, 新的 highlight 参数

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

返回结果与之前一样,与此同时结果中还多了一个叫做 highlight 的部分。这个部分包含了 about 属性匹配的文本片段,并以 HTML 标签 <em></em> 封装:

聚合分析

关键字 说明
aggs 聚合
terms ???
avg 求均值
  • 单独聚合

挖掘出雇员中最受欢迎的兴趣爱好

GET /megacorp/employee/_search
{
  "aggs": {
    "all_interests": {
      "terms": { "field": "interests" }
    }
  }
}
  • 组合聚合

如果想知道叫 Smith 的雇员中最受欢迎的兴趣爱好,可以直接添加适当的查询来组合查询

GET /megacorp/employee/_search
{
  "query": {
    "match": {
      "last_name": "smith"
    }
  },
  "aggs": {
    "all_interests": {
      "terms": {
        "field": "interests"
      }
    }
  }
}
  • 分级汇总

比如,查询特定兴趣爱好员工的平均年龄

GET /megacorp/employee/_search
{
    "aggs" : {
        "all_interests" : {
            "terms" : { "field" : "interests" },
            "aggs" : {
                "avg_age" : {
                    "avg" : { "field" : "age" }
                }
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/JasonZhu_csdn/article/details/84499489