Elasticsearch lanza una SearchParseException
consulta de análisis temporal si se encuentran algunos documentos que no contienen el campo utilizado en los criterios de clasificación.
SearchParseException: Parse Failure [No se encontró ninguna asignación para [price] para ordenar]
¿Cómo puedo buscar con éxito estos documentos, incluso si faltan algunos price
campos?
Respuestas:
Después de investigar más, encontré la solución que se indica a continuación.
ignore_unmapped
debe establecerse explícitamente entrue
en la cláusula de clasificación.Para obtener más información, consulte las referencias de Elasticsearch para:
fuente
"ignore_unmapped" : true
y comenzó a funcionar nuevamente, pero lo extraño es lo que sucedió detrás de la escena. ¡Quién sabe! De todos modos, funciona ahora. +1Tenga en cuenta que "ignore_unmapped" ahora está en desuso en favor de "unmapped_type". Esto se hizo como parte de # 7039
De la documentación: Antes de 1.4.0 existía el parámetro booleano ignore_unmapped, que no era información suficiente para decidir los valores de clasificación que se emitían y no funcionaba para la búsqueda de índices cruzados. Todavía es compatible, pero se anima a los usuarios a migrar al nuevo unmapped_type.
De forma predeterminada, la solicitud de búsqueda fallará si no hay una asignación asociada con un campo. La opción unmapped_type permite ignorar los campos que no tienen mapeo y no ordenarlos. El valor de este parámetro se utiliza para determinar qué valores de clasificación emitir. A continuación, se muestra un ejemplo de cómo se puede utilizar:
Si alguno de los índices que se consultan no tiene una asignación de precio, Elasticsearch lo manejará como si hubiera una asignación de tipo largo, y todos los documentos de este índice no tienen valor para este campo.
fuente
Aparentemente, ElasticSearch no ordenará los valores nulos. Supuse que trataría nulo como si estuviera al principio o al final (como con el pedido de SQL) pero creo que también desencadena este error.
Entonces, si ve este error, es posible que deba asegurarse de que el atributo de clasificación tenga un valor predeterminado cuando se envíe a ElasticSearch.
Tuve este error con Rails + ElasticSearch + Tire porque la columna de clasificación no tenía un valor predeterminado, por lo que se estaba enviando a ES como nulo.
Este problema indica que se están manejando valores nulos, pero no fue mi experiencia. De todos modos, vale la pena intentarlo.
fuente
Experimenté el mismo problema (más o menos; obtendría algunos errores, pero algunos resultados), pero en mi caso, mi búsqueda se emitía en la raíz (sin índice especificado), y los errores que recibía se debían a que la búsqueda / orden también era buscando un índice de Kibana.
Estúpido error, pero tal vez esto ayude a alguien más que termine aquí.
fuente
Elasticsearch 6.4
simplemente especifique el índice y eso es todo en Kibana
ANTES DE
DESPUÉS
fuente
si está usando es 6.7
prueba este
fuente
También puede usar un script que le brinda cierta flexibilidad:
fuente
Cuando usamos el siguiente código, donde added_on es la fecha, ¿qué sucede? se analiza el texto de atributo, lo que significa que se divide en palabras distintas cuando se almacena, y permite búsquedas de texto libre en una o más palabras en el campo
por lo que hay "texto" y "palabra clave" asociados con los campos, por lo que si necesitamos utilizar la agregación en la consulta, necesitamos el valor del campo en general, la palabra clave.
fuente