小编use*_*201的帖子

将聚合限制为过滤器的结果

给定一组在一个字段中具有给定值的文档,我想知道有多少文档具有第二个字段的每个值.

我尝试使用以下查询的术语聚合来做到这一点:

{
    "size": 0,
    "filter": {
        "term": {
            "field1": "value"
        }
    },
    "aggregations": {
        "field2" : {
            "terms" : { "field" : "field2" }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但返回的计数显示整个索引中第二个字段的每个值的文档数,而不限于第一个字段具有给定值的文档.

我究竟做错了什么?

filter aggregation elasticsearch

18
推荐指数
2
解决办法
2万
查看次数

单个查询以查找某些字段具有最大值的文档

我有一组具有唯一数字运行ID的文档,我想找到运行ID最高的文档.

我可以做两个查询.

首先,我可以找到最高运行ID:

{
    "size": 0,
    "aggregations": {
      "latest_run_id": {
        "aggregations": {
          "latest_run_id": {
            "max": {"field": "run_id"}
          }
        }
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

其次,我可以找到运行id的文件:

{
    "filter": {
        {"term": {"run_id": latest_run_id}}
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法用一个查询来做到这一点?

elasticsearch

16
推荐指数
2
解决办法
2万
查看次数

将已解决的承诺注入服务中

在设置依赖于该信息的一堆服务之前,我需要从服务器获取一些信息(模式).

我的服务器提供了一个定义模型各种属性的模式.在我的角度代码中,我有一个获取此架构的服务:

services.factory('schema', function($q, $http) {
    var deferred = $q.defer();
        $http.get('schema/').then(function(response) {
        schema = // some function of response.data
        deferred.resolve(schema);
    }, function() {
        deferred.reject('There was a problem fetching the schema');
    }); 
        return deferred.promise;
});
Run Code Online (Sandbox Code Playgroud)

我想将架构对象而不是promise作为注入依赖于架构的其他服务.$ routeProvider允许我们为控制器执行此操作:

app.config(function($routeProvider) {
    $routeProvider.
        when('/', {
            controller: 'SomeCtrl',
            resolve: {
                schema: 'schema'
            },
            ...
        });
});
Run Code Online (Sandbox Code Playgroud)

这允许我像这样定义SomeCtrl:

controllers.controller('SomeCtrl', function($scope, schema) {
    // schema is an object
    ...
});
Run Code Online (Sandbox Code Playgroud)

但对于服务,我必须这样做:

services.factory('SomeService', function(schema) {
    // schema is a promise
    schema.then(function(schema) {
        ...
    });
});
Run Code Online (Sandbox Code Playgroud)

有什么方法可以做到这一点吗?

javascript angularjs angular-promise

12
推荐指数
2
解决办法
3486
查看次数

迭代asyncio.coroutine

我最近一直在使用asyncio,虽然我开始对它的工作原理有所了解,但我还是无法做到.我不确定是不是因为我的构造错误了,或者有什么理由说我为什么要做的事情没有意义.

简而言之,我希望能够迭代一个让步的asyncio.coroutine.例如,我希望能够做到这样的事情:

@asyncio.coroutine
def countdown(n):
    while n > 0:
        yield from asyncio.sleep(1)
        n = n - 1
        yield n

@asyncio.coroutine
def do_work():
    for n in countdown(5):
        print(n)

loop.run_until_complete(do_work())
Run Code Online (Sandbox Code Playgroud)

然而,这引起了asyncio的一个例外.我尝试了其他的东西,for n in (yield from countdown(5)): ...但是它也提供了类似的不透明的运行时异常.

我不能立即明白为什么你不应该做这样的事情,但是我已经达到理解正在发生的事情的极限.

所以:

  • 如果可以这样做,我该怎么办?
  • 如果不可能,为什么不呢?

如果这个问题不清楚,请告诉我!

python python-3.4 python-asyncio

8
推荐指数
1
解决办法
1906
查看次数