当我提出这样的请求时
curl -XGET "http://localhost:9200/log/travels/_search?pretty" -d '
{
"aggs":{
"travelers":{
"terms":{
"field":"traveler",
"shard_size":0,
"size":5,
"order":{
"cities":"desc"
}
},
"aggs":{
"cities":{
"nested":{
"path":"cities"
},
"aggs":{
"city_count":{
"cardinality":{
"field":"cities.name"
}
}
}
}
}
}
}
}'
Run Code Online (Sandbox Code Playgroud)
我收到了一个错误的回复,就像这样
"aggregations" : {
"travelers" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 410,
"buckets" : [ {
"key" : "patrick",
"doc_count" : 9,
"cities" : {
"doc_count" : 10,
"city_count" : {
"value" : 3
}
}
}, {
"key" : "jonathan",
"doc_count" : 8,
"cities" …Run Code Online (Sandbox Code Playgroud) 我的文件看起来像这样:
{
"clientId": "FPIev_86RwB",
"viewId": "FPIewF1aRyU",
"sessionId": "FPIewE16Rxu",
"trackingId": "FPIewHfaRx9",
"type": "view",
"intVal": [
21,
72,
37
]
}
Run Code Online (Sandbox Code Playgroud)
我想对一组文档中的数组的一个索引进行不同的聚合(例如 sum 或 avg)。但是,我似乎无法像在对象上指定字段一样指定索引。这是我尝试过的:
{
"size": 0,
"aggs": {
"avg_1": {
"avg": {
"field": "intVal.1"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我尝试选择字段的索引,intVal.1但这不起作用。我有可以添加到数组中的可变数量的值,但是特定索引位置中的值都是相同的,所以我想对数组索引进行聚合。我有什么办法可以让这项工作成功吗?
我有 4 个相关实体:
地区(id,名称,自治市,邮政编码) 市(id,名称,城市) 城市(id,名称,省) 省(id,名称)
我刚刚做了一个域服务来获取与邮政编码相关的所有数据。我需要找到与之相关的区、市、市和省。所以我在我的服务中注入了这 4 个 repos。我从每个存储库读取数据,将其格式化为 (id, name) 因为这是我需要的所有数据。
我认为违反了 SRP,但找不到更好的方法来做到这一点。我已经阅读了Refactor to Facade Service,但不认为这适用于我的问题。
我的问题是: 1. 我应该将所有这些实体放入一个聚合中吗?2. 应该在哪里做数据格式化?在 repo 中的服务中还是从服务中调用的另一个类?3. 还有其他更好的解决方案吗?
提前致谢
refactoring domain-driven-design dependency-injection ddd-repositories aggregation
下面给出的是我要在其上触发聚合查询的 Elasticsearch 文档。
{
"id": 1,
"attributes": [
{
"fieldId": 1,
"value": "Male"
},
{
"fieldId": 2,
"value": "12/11/2015"
}
]
}
Run Code Online (Sandbox Code Playgroud)
{
"id": 2,
"attributes": [
{
"fieldId": 1,
"value": "Male"
},
{
"fieldId": 2,
"value": "11/11/2015"
}
]
}
Run Code Online (Sandbox Code Playgroud)
结果必须如下。
[
{
"key": "Male",
"doc_count": 1
}
]
Run Code Online (Sandbox Code Playgroud)
[
{
"key": "12/11/2015",
"doc_count": 1
},
{
"key": "11/11/2015",
"doc_count": 1
}
]
Run Code Online (Sandbox Code Playgroud)
有没有办法在 Elasticsearch 中实现这一点?
我有一些看起来像的测试文档
"hits": {
...
"_source": {
"student": "DTWjkg",
"name": "My Name",
"grade": "A"
...
"student": "ggddee",
"name": "My Name2",
"grade": "B"
...
"student": "ggddee",
"name": "My Name3",
"grade": "A"
Run Code Online (Sandbox Code Playgroud)
我想得到成绩为 B 的学生的百分比,结果是“33%”,假设只有 3 个学生。
我将如何在 Elasticsearch 中做到这一点?
到目前为止,我有这个聚合,我觉得很接近:
"aggs": {
"gradeBPercent": {
"terms": {
"field" : "grade",
"script" : "_value == 'B'"
}
}
}
Run Code Online (Sandbox Code Playgroud)
这将返回:
"aggregations": {
"gradeBPercent": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "false",
"doc_count": 2
},
{
"key": "true",
"doc_count": 1
}
]
} …Run Code Online (Sandbox Code Playgroud) 假设我有一个查询返回生产作业表,并且在一列中我有过去 7 天每个作业的输出数组:
sku | job | outputs
-----------------------------
A1 | 123 | {2,4,6,5,5,5,5}
A1 | 135 | {0,0,0,3,5,7,9}
B3 | 109 | {3,2,3,2,3,2,3}
C5 | 144 | {5,5,5,5,5,5,5}
Run Code Online (Sandbox Code Playgroud)
如何编写一个按 SKU(产品编号)分组并按位置求和 7 天输出的查询?在本例中,您可以看到产品 A1 有两个生产作业:这些作业应合并到结果的一行中:
sku | outputs
--------------------------
A1 | {2,4,6,8,10,12,14}
B3 | {3,2,3,2,3,2,3}
C5 | {5,5,5,5,5,5,5}
Run Code Online (Sandbox Code Playgroud) 想象一下,我有一个 Pandas DataFrame:
# create df
df = pd.DataFrame({'id': [1,1,1,2,2,2],
'val': [5,4,6,3,2,3]})
Run Code Online (Sandbox Code Playgroud)
让我们假设它是按“id”和一个虚构的、未显示的日期列(升序)排序的。我想创建另一列,其中每一行都是该日期的“val”列表。
结束的 DataFrame 将如下所示:
df = pd.DataFrame({'id': [1,1,1,2,2,2],
'val': [5,4,6,3,2,3],
'val_list': [[5],[5,4],[5,4,6],[3],[3,2],[3,2,3]]})
Run Code Online (Sandbox Code Playgroud)
我不想使用循环,因为我正在使用的实际 df 大约有 400 万条记录。我想象我会使用 lambda 函数与 groupby 结合使用(类似这样):
df['val_list'] = df.groupby('id')['val'].apply(lambda x: x.runlist())
Run Code Online (Sandbox Code Playgroud)
这引发了一个 AttributError 因为 runlist() 方法不存在,但我认为解决方案将是这样的。
有谁知道如何解决这个问题?
在互联网搜索过程中,我现在看到很多关于禁用该ONLY_FULL_GROUP_BY功能的问题,因此这意味着很多开发人员在这种严格模式下编写 SQL 查询时遇到了麻烦。
我知道禁用此限制非常简单,但现在我问一个问题: 为什么我不应该这样做?
取消限制会带来什么问题或副作用ONLY_FULL_GROUP_BY?
CouchDB采用酷炫模式,可用于多种其他场景.我在谈论map/reduce结果的持久B树索引.这个想法是预先计算聚合数据并将其存储在B树索引的不同级别.然后,索引可用于有效地查询聚合,而无需始终重新聚合所有数据.然后,如果任何叶级值发生更改,则只需重新计算通过树的上升路径.
例如,如果数据是随时间变化的价格,则索引可以在日,月和年级别存储SUM和COUNT项.然后,如果有人想要查询年初至今的平均价格,那么您所要做的就是总结自年度开始以来所有整月的所有商品数量和计数,加上上个月可用的所有日期,然后除以总和总计COUNT.如果过去的价格必须改变,则变化必须通过索引传播,但只需要更新相应的日期和月份和年份的值,即使这样,一年中其他日期和其他月份的值也可以重新用于计算.
这种方法的通用名称是什么?在任何流行的RDBMS中都存在类似的东西吗?有没有在实践中使用它的经验?
我有一个动物园对象,它由一个带时间戳(到第二个)的时间序列组成.时间序列是不规则的,因为值之间的时间间隔不是规则地间隔的.
我想将不规则间隔的时间序列对象转换为规则间隔的对象,其中值之间的时间间隔是常数 - 比如15分钟,并且是"真实世界"时钟时间.
一些样本数据可能有助于进一步说明
# Sample data
2011-05-05 09:30:04 101.32
2011-05-05 09:30:14 100.09
2011-05-05 09:30:19 99.89
2011-05-05 09:30:35 89.66
2011-05-05 09:30:45 95.16
2011-05-05 09:31:12 100.28
2011-05-05 09:31:50 100.28
2011-05-05 09:32:10 98.28
Run Code Online (Sandbox Code Playgroud)
我想在每个指定的时间段(例如30秒时间段)聚合它们(使用我的自定义函数),使输出看起来像下面的表格.
关键是我希望从第一次观察时间开始,每30秒按时钟时间聚合30秒.当然,第一次存储桶将是第一次对我要在其中聚合的数据进行记录观察(即行)的存储桶.
2011-05-05 09:30:00 101.32
2011-05-05 09:30:30 89.66
2011-05-05 09:31:00 100.28
Run Code Online (Sandbox Code Playgroud)
在给出的示例中,我的自定义聚合函数只返回"选定行"的"集合"中的第一个值进行聚合.
aggregation ×10
arrays ×1
cardinality ×1
couchdb ×1
data-science ×1
group-by ×1
indexing ×1
list ×1
mysql ×1
pandas ×1
postgresql ×1
python ×1
r ×1
refactoring ×1
sorting ×1
zoo ×1