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中env命令_centos7环境变量配置

    linux中env命令_centos7环境变量配置env命令linux系统中的环境变量是很多的,就算是一些常用的环境变量我们也不一定能记得全名。env命令可以显示当前操作系统所有的环境变量,下面的示例代码是Ubuntu系统的。示例dai@ubuntu:~$envUSER=daiXDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0SSH_AUTH_SOCK=/run/user/

    2022年10月1日
    4
  • 2-UFT简介

    2-UFT简介UFT工具界面简介

    2022年5月8日
    159
  • 100999凑整到万位进一_速算方法 速算口诀[通俗易懂]

    100999凑整到万位进一_速算方法 速算口诀[通俗易懂]“估算法”毫无疑问是资料分析题当中的速算第一法,在所有计算进行之前必须考虑能否先行估算。所谓估算,是在精度要求并不太高的情况下,下面是出国留学网小编为大家整理的“速算方法”。本内容为大家提供参考。希望对您有所帮助。请关注出国留学网!!!速算方法一、▲“九几乘九几,左减右补数,后面空两格,写上补乘补。”9300-5005×7=880035=883500看作两个空格二、▲任意数乘25,等于此数…

    2022年6月15日
    72
  • 组合数常用计算公式

    组合数常用计算公式Cnm=n!m!∗(n−m)!C_n^m=\frac{n!}{m!*(n-m)!}Cnm​=m!∗(n−m)!n!​Cn2=n∗(n−1)2C_n^2=\frac{n*(n-1)}{2}Cn2​=2n∗(n−1)​Cn3=n∗(n−1)∗(n−2)6C_n^3=\frac{n*(n-1)*(n-2)}{6}Cn3​=6n∗(n−1)∗(n−2)​Cnm=Cn−1m−1+Cn−1mC_n^m…

    2022年7月25日
    10
  • sqlserver2000数据库置疑_sql2008数据库置疑

    sqlserver2000数据库置疑_sql2008数据库置疑解决由于sql2000日志文件引起的“置疑”。日志有错误——–重新附加提示日志有错误。日志文件丢失—–丢失了.ldf文件,只有.mdf文件的数据库重建。 步骤:一、备份“置疑”数据库的数据文件,因为日志文件.ldf出错,可以只备份.mdf文件。 二、打开企业管理器(SQL Server Enterprise Manager),删除“置疑”数据库,如果提示删除错误,可以重启数据库服务…

    2022年8月20日
    7
  • file指定路径_目标实现的策略与路径

    file指定路径_目标实现的策略与路径FileProvider路径配置策略的理解★FileProvider的使用在AndroidManifest.xml中&amp;lt;providerandroid:name=&quot;android.support.v4.content.FileProvider&quot;android:authorities=&quot;set_your……

    2025年7月30日
    4

发表回复

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

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