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串查询总结

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)
blank

相关推荐

  • 手机听筒被灰尘堵塞了如何清洗?[通俗易懂]

    手机听筒被灰尘堵塞了如何清洗?[通俗易懂]手机听筒被灰尘堵塞后,会出现声音变小,甚至有杂音的情况,影响了听筒的正常使用,通话时容易听不清对方的声音。按理来说,灰尘附着在听筒上,只要轻轻一吹就可以解决,但听筒上的灰尘为什么会凝固在听筒上呢?请往下看。手机听筒上顽固灰尘形成的原因手机在非封闭的环境中使用,避免不了会接触到灰尘,而常规手机听筒的表面都是细小的网格,极其容易沾染灰尘。灰尘附着在听筒表面以后,如果及时清理,就会变得很容易,用嘴吹两下,或者将听筒朝下,在手上轻轻拍打两下即可。如果听筒上的灰尘没有及时清理,遇到水性或者油性物质

  • Android Fragment使用总结以及与Viewpager相结合使用

    Android Fragment使用总结以及与Viewpager相结合使用

  • 3d游戏项目实训一周总结 2

    3d游戏项目实训一周总结 2在本周的项目实训中,我的主要工作是完善对玩家角色的控制脚本,以及初步实现游戏中的AI功能。该AI功能包括游戏玩家角色的AI功能和游戏非玩家角色的AI功能。在玩家角色的控制方面,我们增加了新的需求,要求我们的角色,鲲,不仅能在海底自由移动,还要能飞到天上。角色的控制功能如下:1.当角色在海底中,可以自由地在海底空间移动;2.当角色在天空中时,只能在“水平空间”上移动。3.角色可以从海底飞向天空,飞出…

  • pycharm安装dlib失败_python3.8.0安装教程

    pycharm安装dlib失败_python3.8.0安装教程1.下载dlib-19.19.0-cp38-cp38-win_amd64.whl2.通过cmd,进入控制台,通过cd…的方式跳转当前目录到刚才下载的dlib-19.19.0-cp38-cp38-win_amd64.whl文件所在目录3.在控制台输入pipinstalldlib-19.19.0-cp38-cp38-win_amd64.whl,则会出现如图效果:则dlib库安装成功,启动Pycharm,输入importdlib导入即可使用…

  • C# WPF 基础教程「建议收藏」

    本课程是《C#WPF基础教程》,对应着教材的第1章到第17章。第1章  WPF概述      1.1  Windows图形演化      1.1.1  DirectX:新的图形引擎      1.1.2  硬件加速与WPF      1.2  WPF:高级API      1.2.1  Windows窗体将继续保留      1.2.2 

  • ORM的详解

    ORM的详解

发表回复

您的电子邮箱地址不会被公开。

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