我一直在尝试在 Elasticsearch 中获取词频。我使用 Elasticsearch Python 和 Elasticsearch DSL Python Client。
这是我的代码:
client = Elasticsearch(["my_ip_machine:port"])
s = Search(using=client, index=settings.ES_INDEX) \
.filter("term",content=keyword)\
.filter("term",provider=json_input["media"])\
.filter("range",**{'publish': {"from": begin,"to": end}})
s.aggs.bucket("group_by_state","terms",field="content")
result = s.execute()
我运行该代码并得到如下输出:(我将输出修改得更简洁)
{
"word1": 8,
"word2": 8,
"word3": 6,
"word4": 4,
}
代码在 Elasticsearch 中运行没有问题,我的笔记本电脑中只有 2000 个文档。但是,在 DO 中的 Droplet 中运行该代码时出现问题。我的 Elasticsearch 中有 >2.000.000 个文档,我使用具有 1 GB RAM 的 Droplet。每次我运行该代码时,内存使用量都会增加,并且 Elasticsearch 正在关闭。
还有另一种方法(更有效)在 Elasticsearch 中获取大文档的词频?Elasticsearch 查询中的答案没有问题,我将转换为 DSL。
谢谢 :)