señor - Elasticsearch falla silenciosamente si el documento tiene un error de correspondencia para un campo
la batalla por la tierra media no funciona en windows 7 (2)
Si configura cadena ignore_malformed en falso. No indexaría el documento si está mal formado, pero arroja una excepción. Al menos en elasticsearch 1.6.0.
Ejemplo:
put test
put test/test/_mapping
{
"properties" : {
"title" : {"type" : "string"},
"data" : {"type": "long" ,"ignore_malformed":false}
}
}
put test/test/1
{
"data" : "1",
"title" : "valid coerce string to number"
}
put test/test/2
{
"data" : "hello",
"title" : "invalid number"
}
#Failed Response
{
"error": "MapperParsingException[failed to parse [data]]; nested: NumberFormatException[For input string: /"hello/"]; ",
"status": 400
}
Query with Get fails
get test/test/2
{
"_index": "test",
"_type": "test",
"_id": "2",
"found": false
}
Estoy enfrentando un problema extraño con Elasticsearch. Mi asignación especifica que un determinado campo es de tipo long
. Ahora accidentalmente intenté indexar algunos documentos que tenían tipo de string
para ese campo en lugar de long
. No recibí ningún error de Elasticsearch pero los documentos nunca fueron indexados. Cuando arreglé el problema, los documentos fueron indexados muy bien.
Ejemplo:
Mi mapeo:
{
"field1": {
"type": "long"
}
}
Cuando envío este documento, falla silenciosamente:
{
"field1": "this is a string"
}
Cuando envío esto, funciona como se esperaba:
{
"field1": 12345
}
¿Hay alguna forma de detectar este tipo de errores?
Sospecho que su mapeo es similar a esto:
{
"long_field": {
"type": "long"
}
}
Si ese es el caso, puede establecer el indicador de coerce
en false
ya que es true
de manera predeterminada y siempre intentará convertir cadenas a números y truncar fracciones para enteros.
{
"long_field": {
"type": "long",
"coerce": false
}
}
Si hace esto, la próxima vez que intente indexar un campo largo como una cadena, ES le dirá esto:
MapperParsingException[failed to parse [long_field]]; nested: IllegalArgumentException[Long value passed as String];