2016-06-13 12 views
0

Ich erstelle eine benutzerdefinierte Scoring-Funktion für meine Dokumente, die nur den Wert des Feldes a für jedes Dokument zurückgibt. Im folgenden Beispiel unterscheiden sich die letzten Ziffern der _score in den Ergebnissen jedoch von den letzten Ziffern des Werts a für jedes Dokument. Was passiert hier?Benutzerdefinierte Scoring-Funktion in Elasticsearch gibt keinen erwarteten Feldwert zurück

PUT test/doc/1 
{ 
    "a": 851459198 
} 

PUT test/doc/2 
{ 
    "a": 984968088 
} 

GET test/_search 
{ 
    "query": { 
    "function_score": { 
     "script_score": { 
     "script": { 
      "inline": "doc[\"a\"].value" 
     } 
     } 
    } 
    } 
} 

, dass die folgenden zurückkehren:

{ 
    "took": 16, 
    "timed_out": false, 
    "_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 2, 
    "max_score": 984968060, 
    "hits": [ 
     { 
     "_index": "test", 
     "_type": "doc", 
     "_id": "2", 
     "_score": 984968060, 
     "_source": { 
      "a": 984968088 
     } 
     }, 
     { 
     "_index": "test", 
     "_type": "doc", 
     "_id": "1", 
     "_score": 851459200, 
     "_source": { 
      "a": 851459198 
     } 
     } 
    ] 
    } 
} 

Warum ist die _score anders als der Wert des Feldes a?

Ich verwende Elasticsearch 2.1.1

Antwort

0

Der _score Wert intern hart wie ein Schwimmer codiert, die nur genau ganze Zahlen bis zum Wert darstellen können 134217728. Deshalb, wenn Sie Gebrauch machen wollen, in der Wertung Funktion, von einem Feld, das als eine Nummer größer als das gespeichert wird, wird es den Puffer überlaufen und abgeschnitten werden. Siehe this github issue

Verwandte Themen