Estoy usando Kibana y tengo un índice que se parece a este
GET index_name/
{
"index_name": {
"aliases": {},
"mappings": {
"json": {
"properties": {
"scores": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
Me gustaría obtener la longitud de la scores
matriz (es decir, cuántos text
elementos tiene) para cada registro, con el objetivo final de filtrar los registros cuya longitud sea mayor o igual a 20. Hasta ahora, puedo para identificar (resaltar) cada uno de los registros que ES "20" pero parece que no puedo construir un filtro que luego pueda convertir en un valor booleano (1 para verdadero) para uso posterior / sumar registros que satisfagan la condición. Estoy poniendo esto en el filtro del panel Descubrir, después de hacer clic en 'Editar consulta DSL':
{
"query": {
"match": {
"scores": {
"query": "20",
"type": "phrase"
}
}
}
}
EDITAR: un ejemplo de este campo en el documento es:
scores:12, 12, 12, 20, 20, 20
En la vista de la pestaña de la tabla, tiene un al t
lado, que significa text
. La longitud de este campo varía entre 1 y más de 20 elementos de un registro a otro. Tampoco sé cómo obtener la longitud de este campo (solo) que se me devuelva con una consulta, pero he visto algunas otras respuestas que sugieren algo como esto (que produce un error para mí):
"filter" : {
"script" : {
"script" : "doc['score'].values.length > 10"
}
}
Hay un par de opciones
Esto es para encontrar el número de elementos de cualquier tamaño (separados por ,
).
{
"query": {
"bool": {
"filter": {
"script": {
"script": {
"source":"/, /.split(doc['score.keyword'].value).length > 20"
}
}
}
}
}
}
NOTA: para el ajuste de la solución anterior script.painless.regex.enabled: true
en elasticsearch.yml
que se requiere.
Si todas las puntuaciones son de un tamaño específico (es decir, solo dos dígitos), una longitud de cadena (como estaba intentando) funcionaría:
{
"query": {
"bool": {
"filter": {
"script": {
"script": {
"source":"doc['scores.keyword'].value.length() > 78"
}
}
}
}
}
}
Elegí 78 porque cada elemento (asumiendo 2 dígitos) tiene 2 dígitos + ,
== 4, es decir, desea ver más de 20 19 * 4 + 2
.
Si a menudo le preocupa el tamaño de este conjunto de puntuaciones, probablemente debería almacenarlo como tal. Puede realizar el procesamiento en su canalización de ingesta con el procesador dividido para lograr esto.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras