2015-08-19 5 views
0

Я хочу иметь подмножество ответа json от сервера ElasticSearch. Я новичок в ElasticSearch и JavaScript. Пожалуйста, смотрите. Файл json - это пример файла here из документа ElasticSearch. Это пример:Получение подмножества json от ElasticSearch

{ 
    "took" : 1, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 5, 
    "successful" : 5, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 1000, 
    "max_score" : 1.0, 
    "hits" : [ { 
     "_index" : "bank", 
     "_type" : "account", 
     "_id" : "4", 
     "_score" : 1.0, 
     "_source":{"account_number":4,"balance":27658,"firstname":"Rodriquez","lastname":"Flores","age":31,"gender":"F","address":"986 Wyckoff Avenue","employer":"Tourmania","email":"[email protected]","city":"Eastvale","state":"HI"} 
    }, { 
     "_index" : "bank", 
     "_type" : "account", 
     "_id" : "9", 
     "_score" : 1.0, 
     "_source":{"account_number":9,"balance":24776,"firstname":"Opal","lastname":"Meadows","age":39,"gender":"M","address":"963 Neptune Avenue","employer":"Cedward","email":"[email protected]","city":"Olney","state":"OH"} 
    } 
................................ 
] 
    } 
} 

Как извлечь массив ACCOUNT_NUMBER, баланс и LastName, например [{"account_number":9,"balance":24776,"lastname":"Meadows"},{"account_number":4,"balance":27658,"lastname":"Flores"}, ......... ].

Вот код, который я использовал:

var deferred = $q.defer();   
      $http.get("http://localhost:9200/bank/_search?q=*").success(function(data){   

      var country=data.hits.hists.map(function (count) { 
       return { 
       account_number: count._source.account_number, 
       balance: count._source.balance, 
       lastname: count._source.lastname      
        }; 
       });  

      deferred.resolve(country); 
      }); 

      return deferred.promise; 

Я черпал вдохновение от подобных кодов, как этот one для вызова REST. Кажется, что у меня data есть undefined. Есть ли какая-то конфигурация для ES?

ответ

1

Вы можете поручить ES, чтобы возвращать только те поля, используя source filtering:

$http.get("http://localhost:9200/bank/_search?_source=account_number,balance,lastname&q=*").success(function(data){   

Таким образом, вы не должны отфильтровать поля самостоятельно.

Тогда у вас есть опечатка на следующей строке: hists следует читать hits

var country=data.hits.hits.map(function (count) { 

Пожалуйста, попробуйте его.

+0

Большое спасибо за ваш ответ – David

+0

Он работает, спасибо. – David

Смежные вопросы