我如何使用 angular 遍历弹性搜索结果?

How can i iterate over elastic search results using angular?

在我的仪表板应用程序中,我使用弹性搜索来检索数据,它可以很好地检索数据。现在我需要遍历数据并以所需的方式获得结果。

这是我的代码,

routerApp.controller('SearchCtrl', function($scope, ejsResource) {

       var ejs = ejsResource('http://192.168.1.200:9200');

        var oQuery = ejs.QueryStringQuery().defaultField('Agent');

        var client = ejs.Request()
            .indices('nondomain_callrelatedinfo')
            .types('callrelatedinfos');

        $scope.search = function() {
            $scope.results = client
                .query(oQuery.query($scope.queryTerm || '*'))
                .doSearch();
            console.log($scope.results);

        };

    });

我在结果中添加了一个 console.log 并且它返回了这样的东西, 数据:

当我遍历点击时,它说无法读取 "hits" 的 属性 undefined

$scope.dataRetrieved= $scope.results.value.hits;
            for (var i = 0; i < $scope.dataRetrieved.length; i++) {
                console.log($scope.dataRetrieved[i]);
             };
            };

https://docs.angularjs.org/api/ng/function/angular.forEach

只需嵌套您的 forEach:

angular.forEach(results, function(result, key) {
    angular.forEach(result, function(value, key) {
         this.push(key + ': ' + value);
    }, log);
}, log);

$scope.results.hits.hits;

$scope.dataRetrieved= $scope.results.hits.hits;
        for (var i = 0; i < $scope.dataRetrieved.length; i++) {
            console.log($scope.dataRetrieved[i]);
         };
        };

第一个命中是一个对象,第二个是你的数组。这就是为什么第一次点击没有 属性 长度

您应该使用 doSearch() returns :

的 Promise 对象
client
    .query(oQuery.query($scope.queryTerm || '*'))
    .doSearch().then(function (resp) { 
        var hits = resp.hits.hits; 
        // do whatever
    }, function (err) { 
        console.trace(err.message); 
    });

知道 angular,如果你想将结果绑定到 $scope.result 也许 $timeout(function() {}) 也有帮助。