2016-08-15 4 views
0

meine Mapping:Elasticsearch, Max Länge von Mapping-Typ lange

POST /packtwo-order-sku-log 
{ 
    "settings": { 
     "number_of_shards": 5, 
     "number_of_replicas": 1 
    }, 
    "mappings": { 
     "baitu": { 
      "properties": { 
       "order_id":{ 
        "type": "long" 
       }, 
       .... 
      } 
     } 
     } 
} 

wenn ich suche

"query": {"term" : {"order_id" : 10160815114820888}}

ODER

"query": {"match" : {"order_id" : 10160815114820888}} 

Ich habe Hits 0; Aber wenn ich order_id zu 1016081511482088 ändere, bekam ich Treffer. jedoch die JSON ES zurück zeigt:

 "hits": [ 
     { 
      "_index": "packtwo-order-sku-log", 
      "_type": "baitu", 
      "_id": "AVaMWcchVwJTsNV878q2", 
      "_score": 2.7917593, 
      "_source": { 
       "order_id": 10160815114820888, 
       ... 
      } 
     } 

I 10160815114820888 gesucht -> kein Ergebnis

I 1016081511482088 gesucht -> Ergebnis ist 1016081511482088

ich lange Art finden in offizielles Dokument:

long 

A signed 64-bit integer with a minimum value of -2^63 and a maximum value of 2^63-1 

Meine Daten sind nicht länger als 2^63-1

Also, was ist mein Problem?

Antwort

2

Das ist aufgrund einer rounding issue für IEEE-754 Double-Precision Gleitkommawerte.

Ganze Werte bis 53 Bit sicher dargestellt werden kann, ist jedoch 10160815114820887 54 Bit lang (100100000110010011010100011111100011000001110100010111)

Die wirkliche Zahl, die Sie indiziert war in der Tat 10160815114820887, aber aufgrund der oben genannten Rundungsprobleme, es wurde indiziert und zeigt, wie 10160815114820888

Sie folgendes in Ihrem Browser Javascript-Konsole ausprobieren können:

> var num = 10160815114820887;  <--- assign value 
< undefined 
> num        <--- display value 
< 10160815114820888 

Sie können auch versuchen, einen schnellen Test in Ihrem ES :

# create doc with 10160815114820887 
POST test/test/1 
{ "number": 10160815114820887 } 

# get doc 1 
GET test/test/1 
# result 
{ "number": 10160815114820888 } 

Wie Sie die Nummer, die Sie indiziert haben (10160815114820887) sehen können, wie 10160815114820888 auftaucht, und wie 10160815114820887 gefunden werden kann, weil es auch zu 10160815114820888 bei Suchzeit abgerundet wird.

+0

Genau wie Ihr ES-Beispiel. Sie sagten "aber kann immer noch als 10160815114820887 gefunden werden", aber ich kann das Ergebnis nicht finden, wenn ich die Nummer 10160815114820887 suche. Ich muss 0888 suchen, wenn ich diese Daten bekommen möchte. Also ich denke, es ist nicht nur Show-Problem, sondern auch meine Daten ändern ist ES – wilsonlee

+0

Ein wenig verwirrt über den letzten Teil. Mein Ergebnis ist zum Beispiel, ich indexierte 7. Wenn ich 7 suche, bekomme ich nichts, aber wenn ich 8 suche, bekomme ich eine Antwort von 8. Also, das Problem ist, wenn ich die Nummer indexierte, wird sie zu einem falschen gerundet. Recht? – wilsonlee

+1

Ja, das ist richtig. Und das gleiche gilt für die Suchzeit – Val

Verwandte Themen