Ela Result Api

API 基本格式

在命令行访问 集群的 API 的格式如下:

$curl  -X<VERB>
'<protocol>://<host:port>/<path>/<operation_name>?<query_string>'  -d '<body>'

简单解释一下命令的各个部分:

  • VERB : 请求的方法,包括 GET/POST/PUT/DELETE/HEAD
  • portocol : 协议类型, http 或者 https
  • host:port : Elasticsearch 节点所在的主机名或 IP 和端口,比如:本地的 '127.0.0.1:9200'
  • path : 表示索引名、类型、文档 ID 组成的路径,比如: /logstash-2017.08.09/log/1
  • operation_name : 要执行的操作的名称,比如: _search, _count 等
  • query_string : 这是一个在查询参数中指定的可选参数。比如: pretty 用于输出 JSON 格式的数据
  • body : 用于查询的请求体,正文文本,在这里可以写上具体的匹配条件等

示例:

curl  -XGET  'http://localhost:9200/logstash-2017.09.09'/_search?pretty

表示通过 GET 方法,http 的协议向本地 es 的节点发送查询请求,请求的索引是 logstash-2017.09.09
并且查询结果以JSON 格式输出

列出集群中所有可用的索引

curl -XGET   'http://localhost:9200/_cat/indices?v'

列出集群中所有节点

curl -XGET  'http://localhost:9200/_cat/nodes?v'

下面是通过postman具体操作api实现增删改查

  • 增加索引 使用put方法
    索引名必须是小写字母
    创建索引

    代码
{
    "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_millis"}
                  ##这里的日期是可以有三种格式的 匹配到这三种都会存到ela中
            }
    }
}
  • 增加数据
    插入数据

    代码
{
        "name":  "shark",
        "country":"beijing",
        "age":18,
        "date": "2019-11-22",
}
  • 查看数据


    查看增加后的数据
  • ELA小鸡群查看


    ela中查看后的显示
  • 再次增加数据


    再次增加的数据
  • 删除之前添加的数据,索引中的某一个数据


    删除数据

删除一个索引

curl -XDELETE http://127.0.0.1:9200/people
###这就会把people这个索引给删除
  • 更新数据 不需要加update再一次写入到同一个id也会改变数据
http://127.0.0.1:9200/people/1/_update 
``
{
        "name":  "shark",
        "country":"shanghai",
        "age":20,
        "date": "2017-11-22",
}
``

_update关键字 说明要修改数据

doc 关键字 说明要修改的是文档

通过脚本修改,支持多种脚本语言,也有自己的脚本语言

请求头和直接修改一样

关键字段说明

hits
返回结果中最重要的部分是hits ,它 包含total 字段来表示匹配到的文档总数,并且一个 hits数组包含所查询结果的前十个文档。

hits数组中每个结果包含文档的 _index 、 _type 、 _id ,加上 _source 字段。这意味着我们可以直接从返回的搜索结果中使用整个文档。这不像其他的搜索引擎,仅仅返回文档的ID,需要你单独去获取文档。

每个结果还有一个_score ,它衡量了文档与查询的匹配程度。默认情况下,首先返回最相关的文档结果,就是说,返回的文档是按照 _score 降序排列的。在这个例子中,我们没有指定任何查询,故所有的文档具有相同的相关性,因此对所有的结果而言 1 是中性的 _score

max_score 值是与查询所匹配文档的_score的最大值

took
took 值告诉我们执行整个搜索请求耗费了多少毫秒。

shards编辑
_shards部分 告诉我们在查询中参与分片的总数,以及这些分片成功了多少个失败了多少个。正常情况下我们不希望分片失败,但是分片失败是可能发生的。如果我们遭遇到一种灾难级别的故障,在这个故障中丢失了相同分片的原始数据和副本,那么对这个分片将没有可用副本来对搜索请求作出响应。假若这样,Elasticsearch 将报告这个分片是失败的,但是会继续返回剩余分片的结果

timeout编辑
timed_out 值告诉我们查询是否超时。默认情况下,搜索请求不会超时。 如果低响应时间比完成结果更重要,你可以指定 timeout 为 10 或者 10ms(10毫秒),或者 1s(1秒)

GET /_search?timeout=10ms

==应当注意的是 timeout不是停止执行查询,它仅仅是告知正在协调的节点返回到目前为止收集的结果并且关闭连接。在后台,其他的分片可能仍在执行查询即使是结果已经被发送了。==

同时对多个索引和多个类型进行搜索

/_search
在所有的索引中搜索所有的类型
/gb/_search
在 gb 索引中搜索所有的类型
/gb,us/_search
在 gb 和 us 索引中搜索所有的文档
/g*,u*/_search
在任何以 g 或者 u 开头的索引中搜索所有的类型
/gb/user/_search
在 gb 索引中搜索 user 类型
/gb,us/user,tweet/_search
在 gb 和 us 索引中搜索 user 和 tweet 类型
/_all/user,tweet/_search
在所有的索引中搜索 user 和 tweet 类型
当在单一的索引下进行搜索的时候,Elasticsearch 转发请求到索引的每个分片中,可以是主分片也可以是副本分片,然后从每个分片中收集结果。
多索引搜索恰好也是用相同的方式工作的--只是会涉及到更多的分片。

==搜索一个索引有五个主分片和搜索五个索引各有一个分片准确来所说是等价的。==

对查询到的结果分页

Elasticsearch 接受 from 和 size 参数:

size
显示每次应该返回的结果数量,默认是 10
from
从那个下标索引号开始,默认是 0
因为返回的 hits 是一个数组(列表),所以这里指的是下标,下标从 0 开始计数的。

# 每次返回 5 条数据
curl -XGET '172.16.153.129:9200/_search?size=5&pretty'

# 每次返回 2 条数据,但是从第 6(下标是 5) 条开始
curl -XGET 172.16.153.129:9200/_search?size=2&from=5pretty

考虑到分页过深以及一次请求太多结果的情况,结果集在返回之前先进行排序。 但请记住一个请求经常跨越多个分片,每个分片都产生自己的排序结果,这些结果需要进行集中排序以保证整体顺序是正确的

在分布式系统中,对结果排序的成本随分页的深度成指数上升。这就是 web 搜索引擎对任何查询都不要返回超过 1000 个结果的原因。

映射

为了能够将时间域视为时间,数字域视为数字,字符串域视为全文或精确值字符串, Elasticsearch 需要知道每个域中数据的类型。这个信息包含在映射中。

Elasticsearch 支持 如下简单域类型:

字符串: string
整数 : byte, short, integer, long
浮点数: float, double
布尔型: boolean
日期: date
动态映射

默认 es 会通过 JSON 中基本数据类型,尝试猜测域类型,使用如下规则:

JSON type JSON type
布尔型: true 或者 false boolean
数字数据类型:1,1.2 long,integer,short,byte,double,float,half_float,scaled_float
日期数据类型 date
字符串 text 和 keyword
范围数据类型 integer_range,float_range,long_range,double_range,date_range

查询映射

获取索引 logstash* 中类型为 log 的映射

[elk@ansible ~]$ curl -XGET '127.0.0.1:9200/logstash*/_mapping/log/?pretty'

==错误的映射,例如 将 age域映射为string 类型,而不是 integer ,会导致查询出现令人困惑的结果。==

查询表达式(Query DSL)

查询表达式(Query DSL)是一种非常灵活又富有表现力的 查询语言。 Elasticsearch 使用它可以以简单的 JSON 接口来展现 Lucene 功能的绝大部分。在你的应用中,你应该用它来编写你的查询语句。它可以使你的查询语句更灵活、更精确、易读和易调试。

要使用这种查询表达式,只需将查询语句传递给 query 参数:

  • 基本语法
GET /_search
{
    "query": YOUR_QUERY_HERE
}
  • curl 语法:
    查询所有,即空查询
curl -XGET '172.16.153.129:9200/_search?pretty' -H 'Content-Type: application/json' -d'
{
    "query": {
        "match_all": {}
    }
}

"match_all"对应的是 "match_none"完全不匹配的意思

Elasticsearch提供了基于JSON的完整查询DSL来定义查询。将DSL查询看作查询的AST,由两种类型的子句组成:

  • 叶子查询子句
    叶查询子句中寻找一个特定的值在某一特定领域,如 match,term或 range查询。这些查询可以自己使用。
  • 复合查询子句
    复合查询子句包装其他叶或复合查询,并用于以逻辑方式(例如bool或dis_max查询)组合多个查询 ,或者改变它们的行为(如 constant_score查询)。

查询子句的行为有所不同,具体取决于在查询上下文还是过滤器上下文中使用它们

GET /_search
{
  "query": {   
    "bool": {  
      "must": [
        { "match": { "title":   "Search"        }}, 
        { "match": { "content": "Elasticsearch" }}  
      ],
      "filter": [    
        { "term":  { "status": "published" }}, 
        { "range": { "publish_date": { "gte": "2015-01-01" }}} 
      ]
    }
  }
}

query参数表示查询上下文。
query使用了 bool和两个match子句查询相关内容,这意味着它们被用来评定每个文档如何匹配
filter参数指示过滤器上下文。
filter下的termrange 子句,会过滤出不匹配的文件,但不会影响匹配文件的分数。
提示:
在查询上下文中使用查询子句来处理影响匹配文档分数(即文档匹配程度如何)的条件,并在过滤器上下文中使用所有其他查询子句。

全文匹配

match

执行全文查询的标准查询,包括模糊匹配和短语或近似查询。

match_phrase

与match查询类似,但用于匹配精确短语或单词近似匹配。

match_phrase_prefix

像match_phrase查询一样,但在最后一个单词上做了通配符搜索。

multi_match

match查询 的多字段版本。

common_terms

一个更专门的查询,让更多的优先选择不常见的单词。

query_string

支持紧凑的`Lucene `查询字符串语法,允许您在单个查询字符串中指定AND | OR | NOT条件和多字段搜索。
仅供专家用户使用。

simple_query_string

`query_string`适合直接向用户公开 的语法更简单,更健壮的版本。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容