下面是我的测试数据索引中的记录,使用的是elastic search版本5.6。
[
{
"_index": "test-data",
"_type": "log",
"_id": "123",
"_score": 2,
"_source": {
"request": "/test-url/poll?request_ids=1",
"user": "test1"
}
},
{
"_index": "test-data",
"_type": "log",
"_id": "126",
"_score": 2,
"_source": {
"request": "/test-url/poll?request_ids=2",
"user": "test1"
}
},
{
"_index": "test-data",
"_type": "log",
"_id": "124",
"_score": 2,
"_source": {
"request": "/test-url/poll?request_ids=2",
"user": "test1"
}
},
{
"_index": "test-data",
"_type": "log",
"_id": "125",
"_score": 2,
"_source": {
"request": "/test-url/poll?request_ids=2",
"user": "test1"
}
},
{
"_index": "test-data",
"_type": "log",
"_id": "128",
"_score": 2,
"_source": {
"request": "/test-url/poll?request_ids=2",
"user": "test2"
}
}
]我需要找到具有请求和用户的唯一组合的不同记录的数量,并尝试以下查询。我希望结果是3,但结果是5。
{
"query": {
"bool": {
"must": [
{
"exists": {
"field": "request"
}
},
{
"regexp": {
"request.keyword": "/test-url/poll\\?request_ids=.*"
}
}
]
}
},
"_source": ["request.keyword", "user.keyword","request", "user"],
"aggs": {
"request_count": {
"cardinality": {
"script": {
"lang": "painless",
"source": "[doc['request.keyword'], doc['user.keyword']]"
}
}
}
}
}是否有人可以建议查询或其他选项的错误之处以解决此问题?
发布于 2019-01-16 22:59:57
我认为你应该尝试以下几点:
“[doc['request.keyword'].value + ' ' + doc['user.keyword']].value”这将计算字段的散列,该字段将是由两个值- request和user连接而成的字符串
注意-这将对性能造成很大影响,因为它是在动态计算和提取字段值
避免这种情况的一种可能性是更改索引过程,以创建该合成域作为连接,这样以后您就可以使用普通基数聚合,而不是脚本聚合。
https://stackoverflow.com/questions/54218527
复制相似问题