La búsqueda elástica no puede realizar una consulta de rango de marca de tiempo

Nov 25 2020

necesito hacer una consulta dentro de cierto rango de tiempo,

En primer lugar, quiero hacer una consulta como

    {
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "13000020"
          }
        },
        {
          "range": {
            "timestampstring": {
              "lte": "2020-10-05 15:22:58.537"
            }
          }
        }

      ]
    }
  }
}

y los resultados fueron

{
    "took": 15,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 12,
            "relation": "eq"
        },
        "max_score": 2.0,
        "hits": [
            {
                "_index": "test",
                "_type": "test12",
                "_id": "WvNJl3UBy18_Kc9Pl1tu",
                "_score": 2.0,
                "_source": {
                    "hdrId": 13000020,
                    "timestampstring": "2020-11-05 15:22:58.537",
                    "DevieId": "624232489",
                    "type": "data"
                }
            },
            {
                "_index": "test",
                "_type": "test12",
                "_id": "jvOSmHUBy18_Kc9PK3qp",
                "_score": 2.0,
                "_source": {
                    "hdrId": 13000020,
                    "timestamp": 1604582511655,
                    "timestampstring": "2020-11-05 21:21:51.655",
                    "type": "data"
                }
            }
        ]
    }
}

¿Alguien puede señalar qué parte estaba haciendo mal?

en segundo lugar, no hago el ejemplo en este https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-daterange-aggregation.html

¿Cómo puede el ejemplo anterior adaptarse a mi aplicación, gracias

Jeff

En este momento estoy tratando de hacer en Postman, aquí está la configuración

OBTENGA http: // myip: 9200 / test / dev / _search y ¿necesito hacer el índice aquí?

{
  "mappings": {
    "properties": {
      "timestampstring": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss.SSS"
      }
    }
  }
}

y viene

{
    "error": {
        "root_cause": [
            {
                "type": "parsing_exception",
                "reason": "Unknown key for a START_OBJECT in [mappings].",
                "line": 2,
                "col": 15
            }
        ],
        "type": "parsing_exception",
        "reason": "Unknown key for a START_OBJECT in [mappings].",
        "line": 2,
        "col": 15
    },
    "status": 400
}

Respuestas

2 ESCoder Nov 25 2020 at 10:00

Es posible que no haya configurado la asignación de índice paratimestampstring . Para saber más sobre los formatos de fecha, consulte este

Agregar un ejemplo de trabajo con datos de índice, mapeo, consulta de búsqueda y resultado de búsqueda

Mapeo de índices:

{
  "mappings": {
    "properties": {
      "timestampstring": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss.SSS"
      }
    }
  }
}

Datos de índice:

{
  "hdrId": 13000020,
  "timestamp": 1604582511655,
  "timestampstring": "2020-11-05 21:21:51.655",
  "type": "data"
}
{
  "hdrId": 13000020,
  "timestampstring": "2020-11-05 15:22:58.537",
  "DevieId": "624232489",
  "type": "data"
}

Consulta de busqueda:

Ahora ejecutando la misma consulta de búsqueda, obtendrá el resultado deseado

{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "13000020"
          }
        },
        {
          "range": {
            "timestampstring": {
              "lte": "2020-10-05 15:22:58.537"
            }
          }
        }
      ]
    }
  }
}

Resultado de búsqueda:

"hits": []

Puede aplicar la agregación de rango de fechas de la siguiente manera:

{
  "aggs": {
    "range": {
      "date_range": {
        "field": "timestampstring",
        "format": "yyyy-MM-dd HH:mm:ss.SSS",
        "ranges": [
          {
            "to": "now-1M"       
          },
          {
            "from": "now-1M"
          }
        ]
      }
    }
  }
}

La consulta anterior creará dos depósitos de rango, el primero "agrupará" todos los documentos con fecha anterior a 1 mes atrás, y el segundo "agrupará" todos los documentos fechados desde hace 1 mes. Dado que en los datos del índice, no hay ningún documento con fecha anterior a 1 mes, por lo que el doc_countdel primer segmento es 0 y el del segundo segmento es 2

Resultado de búsqueda:

"aggregations": {
    "range": {
      "buckets": [
        {
          "key": "*-2020-10-25 10:10:07.665",
          "to": 1.603620607665E12,
          "to_as_string": "2020-10-25 10:10:07.665",
          "doc_count": 0
        },
        {
          "key": "2020-10-25 10:10:07.665-*",
          "from": 1.603620607665E12,
          "from_as_string": "2020-10-25 10:10:07.665",
          "doc_count": 2
        }
      ]
    }
  }