我的索引包含具有以下字段的文档:user_id,user_name,post_text,post_sentiment其中post_sentiment是双精度类型,并且表示帖子的情感。大于0的post_sentiment指示它是快乐帖子,而小于0的post_sentiment指示悲伤帖子。
我正在尝试检索快乐帖子多于悲伤帖子的用户。我使用ElasticSearch高级Python库。
我创建了以下函数,在逻辑上看起来是正确的。但是,运行它会产生错误消息:TransportError(500,'search_phase_execution_exception').我已经确定问题不在于连接或索引,而实际上是查询结构。请指出我可能在这里做错了什么。
def users_more_sentiment_posts(search_object: Search):
a = search_object.aggs.bucket(
"users",
"terms",
field="user_id"
).metric(
"positive_post_count_per_bucket",
"range",
field="post_sentiment",
ranges= [{'from': 0.0}]
).metric(
"negative_post_count_per_bucket",
"range",
field="post_sentiment",
ranges= [{'to': 0.0}]
).pipeline(
"happy_posts",
"bucket_selector",
buckets_path={
"positiveCount": "positive_post_count_per_bucket._count",
"negativeCount": "negative_post_count_per_bucket._count"
},
script="params.positiveCount > params.negativeCount"
).bucket(
"posts",
"top_hits",
size=10
)
response = search_object.execute()
1条答案
按热度按时间pqwbnv8z1#
范围聚合返回多个存储桶,并且您需要每个存储桶中的文档计数。我已将两个范围合并到单个聚合中,并添加了关键字以访问正和负范围存储桶。