我一直试图在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。
谢谢:)
答案 0 :(得分:0)
当我遇到这个问题时,我不得不到这里寻找答案:
Elasticsearch query to return all records
您需要以块的形式获取文档。可以说,2000年一次。然后,循环并进行多次查询。