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)


相关推荐

  • 阿里云服务器开放80端口「建议收藏」

    阿里云服务器开放80端口「建议收藏」阿里云服务器开放80端口1.先登录阿里云官网https://www.aliyun.com/2.点击控制台3.点击左边的三条杆4.点击进去之后,找到云服务器ECS5.点击蓝色字体的服务器名称6.找到安全组,安全组列表,加入安全组,配置规则7.点击入方向里的手动添加8.设置如下图所示的参数,最后记得保存哦9.至此,80端口就设置好了。因为我这里设置了Nginx,所以80端口会被占用10.我们在浏览器上访问,也可以验证成功…

  • 两种方式完成批处理的优缺点

    两种方式完成批处理的优缺点

  • JavaScript Scripting.FileSystemObject FSO属性大全

    JavaScript Scripting.FileSystemObject FSO属性大全
    什么是FSO?
    FSO即FileSystemObject文件系统对象,是一种列表Windows磁盘目录和文件,对目录和文件进行删除、新建、复制、剪切、移动等操作的技术。使用FSO网站的好处:直接读取目录下的文件和子目录,方便维护,如需要添加任何内容,将文件放在相应的目录下即可;FSO网站类似Windows操作界面,易于使用,会使用Windows就会使用FSO网站。
    试想一下,很方便的就可以将您硬盘中的文件和文件夹制作成网站,并且日后只要把内

  • 职称计算机一个模块1500,职称计算机考试模块如何选择

    职称计算机一个模块1500,职称计算机考试模块如何选择职称计算机考试模块如何选择选择模块的原则:1、熟悉度:选择自己最常用切最熟悉的模块进行学习考试,像WindowsXP、Word2003、Excel2003、PPT2003、Internet应用、网页制作等都是大家较为熟悉的模块。2、相关性:有些模块之间的相关性很近,比如:学了Word之后再去学习PPT及Frontpage就显得非常容易。3、常用性:像Windows98、Word98、E…

  • Jenkins的三种启动方式「建议收藏」

    Jenkins的三种启动方式「建议收藏」前置条件Java8环境,参考:点击查看。(所有)docker环境,下载(第二种)ApacheTomcat环境,下载(第三种)一、war包启动下载Jenkins的war包打开终端命令行,找到war所在的路径运行java-jarjenkins.war浏览器打开http://localhost:8080,将会看到下图结果二、docker启动打开命令行终端或power…

  • oracle运维面试试题,运维面试题「建议收藏」

    oracle运维面试试题,运维面试题「建议收藏」1)Linux启动大致过程?linux系统启动过程详解:http://www.linuxeye.com/Linux/340.html2)apache有几种工作模式,分别简述两种工作模式及其优缺点?apache主要有两种工作模式:prefork(apache的默认安装模式)和worker(可以在编译的时候加参数–with-mpm-worker选择工作模式)prefork的特点是:(预派生)1.这种…

发表回复

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

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