0

我一直在尝试在 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。

谢谢 :)

4

1 回答 1

0

当我遇到这个问题时,我不得不去这里寻找答案:

Elasticsearch 查询返回所有记录

您需要分块抓取文件。可以说,一次2000。然后,循环并进行多个查询。

于 2015-04-22T20:05:25.670 回答