Как использовать JSON .parse с bucket_script? - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть поле данных, сохраненное со строкой JSON, и мне нужно посчитать среднее значение цены в "{price: 10}", как мне использовать JSON .parse с bucket_script для вычисления этого с поиском elasti c?

1 Ответ

0 голосов
/ 16 апреля 2020

Нет класса разбора JSON в безболезненном, так что вы не можете выполнить это во время запроса. Вам следует проанализировать JSOn во время индексации, это ускорит ваши поисковые запросы.

  1. Ingest

Вы можете использовать JSON Precessor

{
  "json" : {
    "field" : "string_source",
    "target_field" : "json_target"
  }
}

Трубопровод

PUT _ingest/pipeline/my-pipeline
{
  "description": "describe pipeline",
  "processors": [
    {
      "json": {
        "field": "string_source",
        "target_field": "json_target"
      }
    }
  ]
}

Индексный документ с использованием конвейера загрузки

POST json_index/_doc?pipeline=my-pipeline
{
   "string_source":"{\"price\":10}"
}

Документ

"hits" : [
      {
        "_index" : "json_index",
        "_type" : "_doc",
        "_id" : "m7t3gXEB1B5aJp__0oos",
        "_score" : 1.0,
        "_source" : {
          "json_target" : {
            "price" : 10
          },
          "string_source" : """{"price":10}"""
        }
      }
    ]

Если вы не хотите сохранять исходную строку в индексе, вы можете использовать

PUT _ingest/pipeline/my-pipeline
{
  "description": "describe pipeline",
  "processors": [
    {
      "json": {
        "field": "string_source",
        "target_field": "json_target"
      },
      "remove": {
        "field": "string_source"
      }
    }
  ]
}

2. Logsta sh

Это фильтр разбора JSON. Он берет существующее поле, которое содержит JSON, и расширяет его до фактической структуры данных в событии Logsta sh.

    filter {
      json {
        source => "message"
      }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...