Elasticsearch-JSON串查询总结

Elasticsearch-JSON串查询总结对Elasticsearch的JSON方式查询总结

大家好,又见面了,我是你们的朋友全栈君。

欢迎关注“程序杂货铺”公众号,里面有精彩内容,欢迎大家收看^_^

Elasticsearch-JSON查询总结

一.数据模型

(1) 索引定义:

INDEX:POC

TYPE:zabbixmetadata

(2) 数据实体:

ID:自增主键

ID:ID值

VALUE_DAY:该机器当天的值

GROUPNAME:组名

TYPE_MACHINE:机器类型

DATE:日期

TYPE:类型

(3)数据示例:

Elasticsearch-JSON串查询总结

 

二.JSON查询

1.单个变量的查询

POST poc/zabbixmetadata/_search
{
	"query" : {
	"match" : {
		"GROUPNAME" : "压力测试"
		}
	}
}

注:做精确匹配搜索时,最好用过滤语句,因为过滤语句可以缓存数据。

 

2.过滤器查询

POST poc/zabbixmetadata/_search
{
  "size": 100,
  "query": {
    "filtered": {
      "filter": {
        "range": {
          "VALUE_DAY": {
            "gt": 30,
			"lt": 100
          }
        }
      },
      "query": {
        "match": {
          "GROUPNAME": "压力测试"
        }
      }
    }
  }
}

gt : > 大于

lt : < 小于

gte : >= 大于或等于

lte : <= 小于或等于

 

注:字符串范围适用于一个基数较小的字段,一个唯一短语个数较少的字段.你的唯一短语数越多,搜索就越慢。

过滤顺序:更详细的过滤条件应该被放置在其他过滤器之前,以便在更早的排除更多的文档。缓存的过滤器非常快,所以它们需要被放在不能缓存的过滤器之前。

例如:

GET/logs/2014-01/_search{
    "query": {
        "filtered": {
            "filter": {
                "range": {
                    "timestamp": {
                        "gt": "now-1h"
                    }
                }
            }
        }
    }
}

这个过滤条件没有被缓存,因为它使用了 now 方法,这个值每毫秒都在变化。这意味着我们需要每次执行这条查询时都检测一整个月的日志事件。

我们可以通过组合一个缓存的过滤器来让这变得更有效率:我们可以添加一个含固定时间的过滤器来排除掉这个月的大部分数据,例如昨晚凌晨:

[
    "bool": {
        "must": [
            {
                "range": {
                    "timestamp": {
                        "gt": "now-1h/d" <1>
                    }
                }
            },
            {
                "range": {
                    "timestamp": {
                        "gt": "now-1h" <2>
                    }
                }
            }
        ]
    }
]

<1> 这个过滤器被缓存了,因为它使用了取整到昨夜凌晨 now 条件.

<2> 这个过滤器没有被缓存,因为它没有对 now 取整.

now-1h/d 条件取整到昨夜凌晨,所以所有今天之前的文档都被排除掉了。这个结果的字节集被缓存了,因为now被取整了,意味着它只需要每天当昨夜凌晨的值改变时被执行一次。now-1h条件没有被缓存,因为now表示最近一毫秒的时间。然而,得益于第一个过滤器,第二个过滤器只需要检测当天的文档就行。

上面的实现能正常工作是因为自从昨晚凌晨条件比最近一小时条件位置更前。假如它们用别的方式组合,那么最近一小时条件还是需要检测所有的文档,而不仅仅是昨夜以来的文档。

 

3.全文搜索

POST poc/zabbixmetadata/_search
{
  "size": 100,
  "query": {
    "match": {
      "TYPE_MACHINE": "物理机"
    }
  }
}

4.短语搜索

POST poc/zabbixmetadata/_search
{
  "size": 100,
  "query": {
    "match_phrase": {
      "TYPE_MACHINE": "物理机"
    }
  }
}

5.聚合查询

POST poc/zabbixmetadata/_search
{
  "size": 100,
  "aggs": {
    "avg_VALUE_DAY": {
      "avg": {
        "field": "VALUE_DAY"
      }
    }
  },
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "GROUPNAME": "压力测试"
          }
        },
        {
          "match": {
            "TYPE": "cpu"
          }
        },
        {
          "match": {
            "TYPE_MACHINE": "物理机-标准OS"
          }
        }
      ]
    }
  }
}

6.多属性查询

bool 过滤可以用来合并多个过滤条件查询结果的布尔逻辑,它包含一下操作符:

must:多个查询条件的完全匹配,相当于and;

must_not:多个查询条件的相反匹配,相当于not;

should:至少有一个查询条件匹配,相当于or.

 
POST poc/zabbixmetadata/_search
{
  "size": 100,
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "GROUPNAME": "压力测试"
          }
        },
        {
          "match": {
            "TYPE": "cpu"
          }
        },
        {
          "match": {
            "TYPE_MACHINE": "物理机-标准OS"
          }
        }
      ]
    }
  }
}

7.集群健康

GET /_cluster/health

 

green 所有主要分片和复制分片都可用

yellow 所有主要分片可用,但不是所有复制分片都可用

red 不是所有的主要分片都可用

 

8.检查文档是否存在

curl -i -XHEAD http://192.168.52.130:9200/poc/zabbixmetadata/?pretty

文档存在:返回 200 OK

文档不存在:返回 404 Not Found

 

9.查询type的mapping映射

GET poc/zabbixmetadata/_mapping

 

string类型字段默认值是analyzed;如果我们想映射字段为确切值,我们需要设置它为not_analyzed.

 

analyzed 首先分析这个字符串,然后索引.换言之,以全文形式索引此字段.若该字段为analyzed会对其分词,这样使用条件查询时无法得到与字段对应的结果;

not_analyzed 索引这个字段,使之可以被搜索,但是索引内容和指定值一样.不分析此字段;

no 不索引这个字段,这个字段不能为搜索到。

 

注:对analyzed字段进行强制排序会消耗大量内存。

 

10.批量分页查询

GET poc/zabbixmetadata/_search?search_type=scan&scroll=1m
{
    "query": {
        "range": {
            "DATE": {
                "gte": "2017-08-01",
                "lt": "2017-09-01"
            }
        }
    },
    "size": 1000
}

 

三.备注

详细程序及数据请浏览:

http://blog.csdn.net/u013473512/article/details/78119326

http://download.csdn.net/download/u013473512/9998225

https://github.com/Emmitte/ElasticSearch

欢迎关注“程序杂货铺”公众号,里面有精彩内容,欢迎大家收看^_^

Elasticsearch-JSON串查询总结

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138699.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 图片标注工具LabelImg使用教程[通俗易懂]

    图片标注工具LabelImg使用教程[通俗易懂]前言我们知道,图片标注主要是用来创建自己的数据集,方便进行深度学习训练。本篇博客将推荐一款十分好用的图片标注工具LabelImg,重点介绍其安装以及使用的过程。在此感谢原作者在github所做的贡献,这款工具是全图形界面,用Python和Qt写的,最牛的是其标注信息可以直接转化成为XML文件,与PASCALVOC以及ImageNet用的XML是一样的。Ubuntu源码安装由于Ubuntu系统自带p

    2022年6月29日
    65
  • ShFileOperation函数详解

    ShFileOperation函数详解[WinAPI]ShFileOperation函数详解2010-04-1110:24ShFileOperation只有一个参数是LPSHFILEOPSTRUCT型的相当于delphi中的TSHFileOpStruct;  c语言定义为:  typedef struct _SHFILEOPSTRUCT{   HWND         hwnd

    2022年7月18日
    15
  • RSA加密算法原理

    RSA加密算法原理

    2021年4月9日
    176
  • python 拼接字符串字作为字符串使用(python连接字符串)

    Python字符串拼接数字的方法发布时间:2020-08-0515:40:44来源:亿速云阅读:99作者:小新这篇文章将为大家详细讲解有关Python字符串拼接数字的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python字符串拼接数字在某些特殊场景中,我们需要将字符串与数字进行拼接,而Python不允许直接拼接数字和字符串,程序必须先将数字转换成字…

    2022年4月12日
    93
  • centos7和8区别_centos7进不去图形界面

    centos7和8区别_centos7进不去图形界面目前国内各大云服务器的默认centos系统版本还是7,vultr,centos只有8了官网,下载,默认也是8,作为本地主机玩的服务器,还是试一下centos8国外下载之前版本,下载链接:官网默

    2022年8月2日
    3
  • Matlab保存图像的5种方法「建议收藏」

    Matlab保存图像的5种方法「建议收藏」此博客转自:https://blog.csdn.net/holybin/article/details/39502077,另外我补充了一些实验结果。1、使用imwrite函数如图像是img,则可以使用imwrite(img,’result.jpg’);这种方法保存图像大小和显示的大小是一样的。下面的方法得到的图像和原图像的大小不一样;下面是用该方法保存的图片我们注意到,用imwrite保存的图…

    2022年9月13日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号