2015-08-06 4 views
0

Ниже мой запрос для elasticsearch:elasticsearch результат агрегации 0

GET index/_search 
{ 
    "size": 0, 
    "query": { 
     "filtered": { 
     "query": { 
      "match_all": {} 
     }, 
     "filter": { 
      "and": [ 
       { 
        "term": { 
        "id_1": "xx" 
        } 
       }, 
       { 
        "term": { 
        "level": "level2" 
        } 
       }, 
       { 
        "or": [ 
        { 
         "term": { 
          "type": "yyy" 
         } 
        }, 
        { 
         "term": { 
          "type": "zzzz" 
         } 
        } 
        ] 
       } 
      ] 
     } 
     } 
    }, 
    "aggs": { 
     "variable": { 
     "stats": { 
      "field": "score" 
     } 
     } 
    } 
} 

Но результат AGG выглядит следующим образом:

{ 
    "took": 2, 
    "timed_out": false, 
    "_shards": { 
     "total": 5, 
     "successful": 5, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 68, 
     "max_score": 0, 
     "hits": [] 
    }, 
    "aggregations": { 
     "variable": { 
     "count": 30, 
     "min": 0, 
     "max": 0, 
     "avg": 0, 
     "sum": 0 
     } 
    } 
} 

Почему минимальное, максимальное и т.д. равны 0. Но значение там для оценки, как (0,18,0,25 и т. д.). Также при отображении тип для оценки длинный. Пожалуйста, помогите мне решить эту проблему. Заранее спасибо.

Edit:

значение индекса:

"score": 0.18 

Единый документ:

{ 
      "_index": "index", 
      "_type": "ppppp", 
      "_id": "n0IiTEd2QFCnJUZOSiNu1w", 
      "_score": 1, 
      "_source": { 
       "name_2": "aaa", 
       "keyid": "bbbb", 
       "qqq": "cccc", 
       "level": "level2", 
       "type": "kkk", 
       "keytype": "Year", 
       "org_id": 25, 
       "tempid": "113", 
       "id_2": "561", 
       "name_1": "xxxxx", 
       "date_obj": [ 
        { 
        "keyid": "wwwww", 
        "keytype": "Year", 
        "value": 21.510617952000004, 
        "date": "2015", 
        "id": "ggggggg", 
        "productid": "" 
        }, 
        { 
        "keyid": "rrrrrr", 
        "keytype": "Year", 
        "value": 0.13, 
        "date": "2015", 
        "id": "iiiiii", 
        "productid": "" 
        } 
       ], 
       "date": "2015", 
       "ddddd": 21.510617952000004, 
       "id_1": "29", 
       "leveltype": "nnnn", 
       "tttt": 0.13, 
       "score": 0.13 ------------------->problem   
      } 
     } 

Mapping:

curl -XPUT ip:9200/index -d '{ 
    "mappings" : { 
     "places" : {    
      "properties" : { 
       "score" : { "type" : "float"}     
      } 
     } 
} 
}' 
+0

Вы уверены, что индексировали поля 'score' значением' long' (т. Е. '0.18'), а не значением' string' (т. Е. '" 0.18 "')? Можете ли вы добавить «размер»: 1' вам запрос, чтобы мы могли увидеть образец документа? – Val

+0

@Val см. Мой отредактированный пост. – Subburaj

+0

Странно, потому что в ответе агрегирование должно называться 'variavle', а не' score' ... Вы что-то не поняли? Неудачная копия/вставка? – Val

ответ

1

Исправление должно быть так же просто, как изменение типа от score - float (или double) вместо long. long - целочисленный тип, а 0,18 индексируется как 0 под капотом.

"score" : { 
    "type" : "float", 
    "null_value" : 0.0 
} 

Обратите внимание, что после изменения карты вам необходимо переиндексировать свои данные.

+0

Возможно, у первого документа, который вы указали, был счет 1 или 2 или 3. Возможно ли это? Когда я индексирую документ с индексом «оценка: 0.18» в новом индексе, поле 'score' создается как« double », поэтому вы должны были оказаться в неудачном случае с целым числом в вашем первом документе. – Val

+0

Вы протирали индекс и воссоздавали его с нуля? – Val

+0

Пожалуйста, отредактируйте вопрос с помощью сопоставления, которое вы используете. – Val

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