如何使用角度迭代弹性搜索结果?

时间:2015-01-21 09:53:03

标签: javascript html angularjs elasticsearch

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

这是我的代码,

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,它重新启动了这样的事情, 数据:

enter image description here

当我重复点击时,它表示无法读取" hits"未定义

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

3 个答案:

答案 0 :(得分:2)

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);

答案 1 :(得分:2)

您应该使用doSearch()返回的Promise对象:

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

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

答案 2 :(得分:0)

$ scope.results的 hits.hits ;

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

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