在线手册
工具组合ES(检索后台)+ kibana(交互前端)
参考官网部署
./bin/elasticsearch
#浏览器访问
IP:9200
./bin/kibana
#浏览器访问
IP:5601/app/kibana
curl -X '://:/?' -d ''
- VERB: 适当的 HTTP 方法 或 谓词 : GET
、
POST、
PUT、
HEAD 或者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 轻量搜索
# 搜索所有雇员
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 标签 封装:
关键字 | 说明 |
---|---|
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" }
}
}
}
}
}