首页 > 解决方案 > 在弹性搜索中存储网站 URL 命中数

问题描述

我想记录用户请求的页面。此外,我必须存储请求的每个页面的计数。我目前通过更新弹性搜索中的索引来存储用户的网站页面访问。
我通过更新一个类似于

{
    userid : 'id1234',
    url : 'website.com/url-1',
    count : 23,
}

这里,“23”的计数是 ID 为“id1234”的用户请求 URL 的总次数。

为此,我检索文档,增加当前计数,然后再次推送。我的问题是可以通过单个查询来做到这一点吗?我在这里看到了使用脚本的类似方法。我们可以在没有脚本的情况下做到这一点吗?

标签: elasticsearch

解决方案


Elasticsearch 不太适合更新。因此,即使可以进行这样的更新,它也是首先删除记录,然后添加它(整个文档)并重新索引。

这里最接近的可能是使用部分更新功能:

这是文档中的示例:

POST /metrics/users/1/_update
{
   "script" : "ctx._source.count+=1"
}

但是您在问题中提到了它(相关文档的链接可在此处获得)

但是如果你使用脚本,问题仍然是它相对较慢


推荐阅读