我在ElasticSearch中有一个索引,包含每个文档中用户的信息,沿着他们在Facebook上发布的帖子(以非规范化的方式)。
每份文件包含:用户ID|用户名|发布_文本|发布_表情符号
我想检索的ID的用户有超过N个职位。
我刚开始使用ElasticSearch,特别是使用Python(https://elasticsearch-dsl.readthedocs.io/en/latest/search_dsl.html)搜索DSL
我正在使用User_ID字段上的术语聚合来创建存储桶,并希望根据每个存储桶中的文档数量来过滤存储桶。
这是我设法创建的函数,然而,由于我不知道正确的语法,并且仍然与文档混淆,我无法执行它并获得正确的响应。
def users_more_posts_than_query(search_object: Search, num_posts: int):
search_object = search_object.aggs.bucket('posts_count', 'terms', field='user_id')\
.pipeline("having_posts", "bucket_selector", buckets_path={"postsCount": "_count"}, script=f"params.postsCount > {num_posts}")
response = search_object.execute()
for hit in response.hits:
hit.user_id
请指出我在这里做错了什么,以及我怎样才能达到我的预期目标。
1条答案
按热度按时间sg2wtvxw1#
不要重新分配
search_object
,聚合将与命中分开返回