【ELK】Elasticsearch 2.4 API调用小记

官方文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

1.1. 简介

Elasticsearch的JAVA API运行在9300端口上,而通过9200端口则可以与它的RESTful API进行通信,它提供了许多API,如文档API、搜索API、索引API、集群API、状态查询API等。

Elasticsearch很多场景下会被当作一个NoSQL的文档型数据库使用,它同样支持增删查改。(因对性能影响较大,查询删除现在需要额外插件支持)。在我们的使用场景下,增加和查询及状态查看等多数情况下都由Logstash、Kibana和Heap、KOPF插件完成。而作为一个日志分析系统,我们最常用到的就是搜索API了,下面简单介绍一下搜索API。

1.2. 搜索API 与 查询DSL

1.2.1.请求格式

向 Elasticsearch 发出的请求和其他所有的 HTTP 请求的组成部分是一致的。例如,计算集群中文件的数量,我们就可以使用:

curl -XGET 'http://localhost:9200/_count'

Elasticsearch会返回一个HTTP头和一个如下格式的JSON

       { "count": 900416, "_shards": { "total": 55, "successful": 55, "failed": 0 } }

其中count即为命中条件的doc计数,_shard则是被查询分片的状态。

 

Elasticsearch所支持的更完整的请求格式如下:

http://主机名:端口/索引名/type段/id段/方法 

要查询到单个doc,es需要索引名,type名,和ID。

 

l  在Logstash导入数据的时候,如把索引名分成了几种,如apache-*、syslog-*;

索引名支持通配符、多索引、减法

索引名还支持日期运算,如下,可以查询一天前的日志量

curl -XGET 'http://192.168.1.1:9200/<apache-\{now%2Fd-1d\}>/_count?pretty'

加个pretty将使返回内容可读性提高(格式化)。

type名不支持通配符但同样支持多个type如/apache,syslog/

ID名默认自增。

1.2.2.搜索方法

_count方法用于计算命中条件的docs数量

_search 用于查询命中条件的文档

还有很多其他方法可以查看官方文档

Elasticsearch支持以JSON格式的请求体的方式进行搜索,也支持以URI的方式进行简单搜索。在同时使用二者时,会先以URI的条件返回。

1.2.2.1.           URI搜索

fields=字段名,    可以指定返回字段。如:/apache-2016.08.18/_search?fields=loglevel,host

q=fields:word       搜索条件

from=0                 从搜索结果的第几条开始返回

size                       返回数量

 

P.S.:URI以?开头,之间以&连接

例:/apache-*/slave1/_search?q=_all:404&size=100

更多用法请查看:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-uri-request.html

1.2.2.2.           请求体搜索
1.2.2.2.1.       请求体的写法
{
  "query": {
    "bool": {
      "must": [                   
        { "match_all": {}},        
                 ],
      "must_not": [],          
      "should": [],              
      "filter": [                  
        { "term":  { "host": "master" }},                                                  
        { "range": { "@timestamp": { "gte": "2016-08-07" }}}                
      ]
          "sort" : []                   
    }
  },
  "from": 0,                          
  "size": 1000,                     
}

如上,是一个典型的请求体写法,除了查询,还能做一些例如统计、排序之类的工作。除了query外,还有很多其他功能我们可以用到

 

from/size : 值为数字,from为自命中的第几条结果开始返回,size表示返回多少条结果

sort         : 可以指定排序的field。

_source   : 可以设置为true或者false,指定是否返回source字段内容,默认为true,还可以使用通配符,指定范围source里的哪些字段。

aggs        : 汇总统计查询返回内容里某字段里各个值出现的次数。

highlight : 将特定内容加高亮。

1.2.2.3.           查询DSL

Elasticesearch有自己的Query DSL,提供了非常丰富的搜索方式。无法一一道尽,感兴趣的小伙伴可以浏览:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html

这一章,查看详细用法。下面简单介绍一下常用的一些API

1.2.2.3.1.       全文查询

l  匹配查询

{
    "match" : {
        "message" : "this is a test"     }
}

 

l  多项匹配查询

{
  "multi_match" : {
    "query":    "this is a test",
    "fields": [ "subject", "message" ]   #多个字段内匹配
  }
}
1.2.2.3.2.       项级别查询

l  单项查询

{
    "term" : { "fields" : "word" }
}

项查询和匹配查询是略有区别的,具体戳

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html

l  多项查询

{
     "terms" : { "field" : ["word1", "word2"]}
}

 

l   范围查询

对num值的查询

{
    "range" : {
        "age" : {
            "gte" : 10,
            "lte" : 20,
            "boost" : 2.0
        }
    }
}

对时间范围的查询如下

{
    "range" : {
        "date" : {
            "gte" : "now-1d/d",
            "lt" :  "now/d"
        }
    }
}

带格式的时间范围查询

{
    "range" : {
        "born" : {
            "gte": "01/01/2012",
            "lte": "2013",
            "format": "dd/MM/yyyy||yyyy"
        }
    }
}

l  存在查询

返回字段存在值的文档

{
    "exists" : { "field" : "user" }
}

l  通配符查询

可以使用*或者?匹配多个或单个字符

{
    "wildcard" : { "user" : "ki*y" }
}

l  正则表达式查询

{
    "regexp":{
        "name.first": {
            "value": "s.*y",
            "flags" : "INTERSECTION|COMPLEMENT|EMPTY",
            "max_determinized_states": 20000
        }
    }
}

l  模糊查询

{
    "fuzzy" : {
        "price" : {
            "value" : 12,
            "fuzziness" : 2        #模糊范围
        }
    }
}

l  类型查询

{
    "type" : {
        "value" : "my_type"
    }
}

l  ID查询

{
    "ids" : {
        "type" : "my_type",
        "values" : ["1", "4", "100"]
    }
}
1.2.2.3.3.       混合查询

l  布尔查询

"bool": {
      "must”: {},
      "filter": {},
         "must_not" : {},
         "should" : []
}
1.2.2.3.4.       专用查询

l  近似查询

{
    "more_like_this" : {
        "fields" : ["title", "description"],
        "like" : [
        {
            "_index" : "imdb",
            "_type" : "movies",
            "_id" : "1"
        },
        {
            "_index" : "imdb",
            "_type" : "movies",
            "_id" : "2"
        },
        "and potentially some more text here as well"
        ],
        "min_term_freq" : 1,
        "max_query_terms" : 12
    }
}

 

转载于:https://www.cnblogs.com/caizhifeng/p/10283332.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值