使用大型文档在Elasticsearch中获取单词频率

时间:2015-04-22 19:31:09

标签: python elasticsearch elasticsearch-dsl

我一直试图在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文档,我使用Droplet和1 GB RAM。每次运行该代码时,内存使用量都会增加,Elasticsearch也会关闭。

使用大型文档在Elasticsearch中获取单词频率还有另一种方法(更有效)吗? Elasticsearch中的答案查询没问题,我将转换为DSL。

谢谢:)

1 个答案:

答案 0 :(得分:0)

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

Elasticsearch query to return all records

您需要以块的形式获取文档。可以说,2000年一次。然后,循环并进行多次查询。