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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux 文本编辑器vi常用命令

    linux 文本编辑器vi常用命令linux之文本编辑器vi常用命令由于经常在linux下面文本操作,所以这里稍微系统的总结一下自己常用的vi命令1、打开命令:vi+filename(还有各种打开的姿势,只不过我比较顺手这个)2、退出命令::q退出而且不保存修改的内容:q!强制退出不保存修改的内容:wq退出并且保存修改的内容:wq!强制保存修改的内容然后退出(修改了只读文件会用到)ZZ退出并且保存修改的内容,相当于:wq,看个人习惯3、光标移动命令个人比较喜欢上下左右方向键,字母h(左),j

    2022年7月26日
    3
  • java当前时间的时间戳_java获取时间戳和当前时间

    java当前时间的时间戳_java获取时间戳和当前时间java中的时间戳是毫秒为单位,13位;unix的时间戳是秒,10位一、java中获取时间戳//方法一System.currentTimeMillis();//方法二Calendar.getInstance().getTimeInMillis();//方法三newDate().getTime();三种方法性能比较:每种方法运行1亿次importjava.text.SimpleDateFo…

    2022年5月3日
    311
  • Haar特征提取算法的实现

    Haar特征提取算法的实现自己动手 丰衣食足 系列 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp Haar 特征是一种很早就被提出的图像特征提取算法 后面还经过了几次改进 Haar 特征能够很好地运用于人脸识别技术 当然很多目标检测技术中对目标图像的特征提取也可以使用 Haar 特征 当我们使用 opencv 自带的 cascade 分类器时可以选择 Haar 特征作为训练样本数据的特征描述子 然后将特征描述子作为样本数据送入 cascade 分类器中 就可以通过 Adab

    2025年7月10日
    0
  • Android项目文件夹结构分析

    Android项目文件夹结构分析

    2021年11月13日
    140
  • 程序员必备的6个辅助开发的软件神器有哪些_程序员最喜欢的五大神器

    程序员必备的6个辅助开发的软件神器有哪些_程序员最喜欢的五大神器前言(欢迎评论区列出你认为牛逼的开发神器~)本文来自MeloDev的投稿,他的博客地址:http://www.jianshu.com/u/f5909165c1e8程序员必备简捷开发辅助工具总结写在前面:工欲善其事必先利其器,拥有简捷的开发辅助工具能大大提高我们程序猿的开发效率。Melo刚到学校就给大家总结了一些常用的辅助开发的工具,希望大家能喜欢,闲话不多说,马…

    2022年10月19日
    1

发表回复

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

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