繁体   English   中英

ElasticSearch:将聚合限制为查询字符串

[英]ElasticSearch: Restrict Aggregations to Query String

我正在努力使聚合仅限于查询。 我当然尝试过:

{
    "_source": ["burger.id", "burger.user_name", "burger.timestamp"],
    "query": {
        "query_string": {
            "query": "burger.user_name:Bob"
        }
    },
    "aggs": {
        "burger_count": {
            "cardinality": {
                "field": "burger.id.keyword"
            }
        },
        "min_dtm": {
            "min": {
                "field": "burger.timestamp"
            }
        },
        "max_dtm": {
            "max": {
                "field": "burger.timestamp"
            }
        }
    }
}

我非常希望使用“ query_string”进行过滤,因为我们有一个非常好的前端,它使用户可以轻松构建查询,然后将查询转换为“ query_string”。

不幸的是,我还没有找到一种组合query_string和聚合的方法,以使聚合仅覆盖查询的结果!

我已经阅读了很多有关此操作的文章,但是它们都非常老旧且过时,因为它们都建议使用过时的筛选查询方式,但即使这样也不能实现query_string。

UPDATE

这是一些示例文件。 看来我的查询没有过滤我的结果。 是否有我缺少的设置? 我还把所有领域都改为汉堡。

{
    "_index": "burgers",
    "_type": "burger",
    "_id": "123",
    "_score": 5.3759894,
    "_source": {
      "inference": {
        "id": "1",
        "user_name": "Jonathan",
        "timestamp": 1541521691847
      }
    }
  },
  {
    "_index": "burgers",
    "_type": "burger",
    "_id": "456",
    "_score": 5.3759894,
    "_source": {
      "inference": {
        "id": "2",
        "user_name": "Ryan",
        "timestamp": 1542416601153
      }
    }
  },
  {
    "_index": "burgers",
    "_type": "burger",
    "_id": "789",
    "_score": 5.3759894,
    "_source": {
      "inference": {
        "id": "3",
        "user_name": "Grant",
        "timestamp": 1542237715511
      }
    }
  }

找到了我的答案! 看来此问题是由于查询burger.user_name文本字段而不是关键字字段burger.user_name.keyword 更改我的query_string以在每个文本字段中使用关键字解决了我的问题。

{
    "_source": ["burger.id", "burger.user_name", "burger.timestamp"],
    "query": {
        "query_string": {
            "query": "burger.user_name.keyword:Bob"
        }
    },
    "aggs": {
        "burger_count": {
            "cardinality": {
                "field": "burger.id.keyword"
            }
        },
        "min_dtm": {
            "min": {
                "field": "burger.timestamp"
            }
        },
        "max_dtm": {
            "max": {
                "field": "burger.timestamp"
            }
        }
    }
}

这样的答案给出了一个很好的简短解释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM