Elasticsearch:从查询匹配中计算文档
Elasticsearch: count documents from query match
我想获取某个时间范围内匹配特定字符串的文档数量。
如何从该查询中指定时间范围?
GET myindex/_count
{
"query": {
"match" : {
"log" : "ERROR"
}
}
}
获取时间范围:
{
"query": {
"range": {
"msgSubmissionTime": {
"gte": "now-10m",
"lt": "now"
}
}
}
}
有没有办法合并这两个查询?
当然可以。
它可以通过两种方式完成:过滤和布尔查询。
Elastic 建议使用过滤器来预过滤结果 - 它们比查询更快。
布尔查询可以通过 AND、OR、NOT 运算符组合不同的查询。
在 Elastic 官方文档中,您可以找到几乎符合您问题的示例 - elasticsearch documentation
所以您的查询将是这样的:
{
"query": {
"bool": {
"must": [
{
"match": {
"log": "ERROR"
}
}
],
"filter": {
"range": {
"msgSubmissionTime": {
"gte": "now-10m",
"lte": "now"
}
}
}
}
}
}
试试这个。
{
"query": {
"bool": {
"filter": {
"range": {
"msgSubmissionTime": {
"gte": "now-10m",
"lt": "now"
}
}
},
"must": [
{
"term": {
"log" : "ERROR"
}
}
]
}
}
}
我上面的人是对的,但是他们都为 must
添加了冗余 [
,]
这意味着查询超过了匹配字段。
GET _search
{
"query": {
"bool" : {
"must" : {
"match" : { "log": "ERROR" }
},
"filter":
{
"range": {
"msgSubmissionTime": {
"gte": "now-10m",
"lte": "now"
}
}
}
}
}
}
我想获取某个时间范围内匹配特定字符串的文档数量。
如何从该查询中指定时间范围?
GET myindex/_count
{
"query": {
"match" : {
"log" : "ERROR"
}
}
}
获取时间范围:
{
"query": {
"range": {
"msgSubmissionTime": {
"gte": "now-10m",
"lt": "now"
}
}
}
}
有没有办法合并这两个查询?
当然可以。 它可以通过两种方式完成:过滤和布尔查询。
Elastic 建议使用过滤器来预过滤结果 - 它们比查询更快。
布尔查询可以通过 AND、OR、NOT 运算符组合不同的查询。
在 Elastic 官方文档中,您可以找到几乎符合您问题的示例 - elasticsearch documentation
所以您的查询将是这样的:
{
"query": {
"bool": {
"must": [
{
"match": {
"log": "ERROR"
}
}
],
"filter": {
"range": {
"msgSubmissionTime": {
"gte": "now-10m",
"lte": "now"
}
}
}
}
}
}
试试这个。
{
"query": {
"bool": {
"filter": {
"range": {
"msgSubmissionTime": {
"gte": "now-10m",
"lt": "now"
}
}
},
"must": [
{
"term": {
"log" : "ERROR"
}
}
]
}
}
}
我上面的人是对的,但是他们都为 must
添加了冗余 [
,]
这意味着查询超过了匹配字段。
GET _search
{
"query": {
"bool" : {
"must" : {
"match" : { "log": "ERROR" }
},
"filter":
{
"range": {
"msgSubmissionTime": {
"gte": "now-10m",
"lte": "now"
}
}
}
}
}
}