首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多字段弹性搜索基数聚合

多字段弹性搜索基数聚合
EN

Stack Overflow用户
提问于 2019-01-16 21:50:32
回答 1查看 1.2K关注 0票数 0

下面是我的测试数据索引中的记录,使用的是elastic search版本5.6。

代码语言:javascript
复制
[
  {
    "_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。

代码语言:javascript
复制
{
  "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']]"
            }
          }
        }
  }
}

是否有人可以建议查询或其他选项的错误之处以解决此问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-16 22:59:57

我认为你应该尝试以下几点:

代码语言:javascript
复制
“[doc['request.keyword'].value + ' ' + doc['user.keyword']].value”

这将计算字段的散列,该字段将是由两个值- request和user连接而成的字符串

注意-这将对性能造成很大影响,因为它是在动态计算和提取字段值

避免这种情况的一种可能性是更改索引过程,以创建该合成域作为连接,这样以后您就可以使用普通基数聚合,而不是脚本聚合。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54218527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档