我需要在 ElasticSearch 中计算管道聚合,但我不知道如何表达它。
每个文档都有一个电子邮件地址和一个金额。我需要输出按唯一电子邮件分组的金额计数范围。
{ "0 - 99": 300, "100 - 400": 100 ...}
Run Code Online (Sandbox Code Playgroud)
基本上是预期的输出(密钥将在我的应用程序代码中转换),表明 300 封独特的电子邮件在所有文档中累计收到至少 99 封(数量)。
直觉上,我希望像下面这样的查询。但是,范围似乎不是存储桶聚合(或允许存储桶路径)。
这里的正确方法是什么?
{
aggs: {
users: {
terms: {
field: "email"
},
aggs: {
amount_received: {
sum: {
field: "amount"
}
}
}
},
amount_ranges: {
range: {
buckets_path: "users>amount_received",
ranges: [
{ to: 99.0 },
{ from: 100.0, to: 299.0 },
{ from: 300.0, to: 599.0 },
{ from: 600.0 }
]
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 这应该很简单,我实际上已经在昨天工作了.我不知道发生了什么变化,但它现在抛出一个错误.
def game_design(request):
user=User.objects.get(pk=request.user.id)
organization=user.organization_set.all()[0]
website=organization.website_set.all()[0]
surveys=website.survey_set.all()
error=''
SurveyFormSet=inlineformset_factory(Website, Survey, extra=0, can_delete=True)
NavigationFormSet=modelformset_factory(Navigation, extra=1)
if request.method=='POST':
survey_formset=SurveyFormSet(request.POST, request.FILES, prefix="surveys")
navigation_formset=NavigationFormSet(request.POST, request.FILES, prefix="navigations")
if survey_formset.is_valid() and navigation_formset.is_valid():
survey_formset.save()
navigation_formset.save()
return HttpResponseRedirect("/rewards/")
else:
error="Please fix your errors"
survey_formset=SurveyFormSet(request.POST, request.FILES,prefix="surveys")
navigation_formset=NavigationFormSet(request.POST, request.FILES,prefix="navigations")
return render_to_response('website/game_design.html', {'website':website,'survey_formset':survey_formset, 'navigation_formset':navigation_formset, 'error':error}, context_instance=RequestContext(request))
else:
survey_formset=SurveyFormSet(instance=website,prefix="surveys")
navigation_formset=NavigationFormSet(queryset=Navigation.objects.none(),prefix="navigations")
return render_to_response("website/game_design.html", {'website':website,'survey_formset':survey_formset,'navigation_formset':navigation_formset,'error':error},context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
感谢您对此提供任何帮助
这应该是一个简单的问题,但它现在已经让我失望了一段时间.
我想保存一个模型,但我不断收到上述错误.
class Favorite(models.Model):
post=models.ForeignKey(Post)
user=models.ForeignKey(User)
note=models.TextField(max_length=1000, blank=True)
def listing(request, pid):
post=get_object_or_404(Post,pk=pid)
favform=FavoriteForm()
try:
ratings=post.post_rating_set.all()
score=ratings.aggregate(mark=Avg('rating'))
score=int(score.get('mark',0))-1
except AttributeError:
ratings=''
score=1000
if request.method=="POST" and request.POST.get('save_it',''):
user=User.objects.get(pk=request.user.id)
favorite=FavoriteForm(request.POST)
if favorite.is_valid:
favorite.save(commit=False)
favorite.user=user
favorite.post=post
favorite.save()
Run Code Online (Sandbox Code Playgroud)
我的表单验证,我已经测试了用户和帖子,它们都包含预期的查询集.我尝试不先保存最喜欢的表单,但也失败了.m2m不适合这里.
这是mysql设置错误吗?
当我尝试在Ubuntu 10.4中下载1.3版本的Django时,它将其保存为index.html.
wget http://www.djangoproject.com/download/1.3/tarball/
Run Code Online (Sandbox Code Playgroud)
我过去成功完成了这项工作.已安装Python2.6.没有安装以前版本的django.
是什么赋予了?
我正在尝试计算自帖子上线以来的小时数.它有效,除了它将24小时后视为0小时.换句话说,它似乎只是从基准时间中减去当前时间而不考虑日差.
def hours_live(self):
diff=((datetime.datetime.today() - self.created).seconds)/3600
return '%d Hours Ago' %diff
Run Code Online (Sandbox Code Playgroud)
self.created指的是Django DateTimeField:
created=models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
我在这里错过了关于datetime对象的内容?
是否有一个简单的钩子可以通过 Django 模型 PK 查找 Haystack 结果?类似的东西(这不起作用)
SearchQuerySet().filter(pk=12)
Run Code Online (Sandbox Code Playgroud)
另一种方法是,我将显式字段添加到模型 pk 的 SearchIndex 中,但这似乎很浪费,因为 Haystack 的查询集结果包含底层 django 模型 pk