Задать вопрос
@zx5zx6

Как правильно сформировать запрос к ElasticSearch?

Описание:
В приложении есть возможность фильтровать дату по значениям ключей. Например, если нужно отобразить все пункты, в которых "Result: success";

Для одного из ключей, значение всегда имеет вид объекта JS, с кавычками и т.д. Это приводит к тому, что elasticsearch не может правильно распарсить JSON. Например, мы ищем все пункты в которых свойство changeSet = {'filteringRuleName':null}

Вопрос: как работать с таким запросом, чтобы еластик мог его нормально обрабатывать?

Фрагмент рабочего запроса:
В данном случае ищу дату у которой свойство action = EDIT;
"query_string": { "query": "action:EDIT"}

Фрагмент нерабочего запроса пример:
В данном случае ищу дату у которой свойство changeSet = {'filteringRuleName':null};
"query_string": { "query": "changeSet:{'filteringRuleName':null}"}


Код возвращаемой ошибки:
"reason": {
                    "type": "query_shard_exception",
                    "reason": "Failed to parse query [changeSet:{'filteringRuleName':null}]",
                    "index_uuid": "h0xXZj0eQGWrSIYTcfv5nQ",
                    "index": "cxc-audit-22-30-2021.02.05",
                    "caused_by": {
                        "type": "parse_exception",
                        "reason": "parse_exception: Cannot parse 'changeSet:{'filteringRuleName':null}': Encountered \" \"}\" \"} \"\" at line 1, column 35.\nWas expecting:\n    \"TO\" ...\n    ",
                        "caused_by": {
                            "type": "parse_exception",
                            "reason": "parse_exception: Encountered \" \"}\" \"} \"\" at line 1, column 35.\nWas expecting:\n    \"TO\" ...\n    "
                        }
                    }
                }


___________________________________________
___________________________________________
___________________________________________
___________________________________________
___________________________________________

Полный рабочий запрос:
{
  "size": 10,
  "from": 0,
  "sort": [
    {
      "@timestamp": {
        "order": "desc"
      }
    }
  ],
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "filter": [
              {
                "range": {
                  "@timestamp": {
                    "from": 1612523952692,
                    "to": 1612545552692,
                    "format": "epoch_millis"
                  }
                }
              },
              {
                "query_string": {
                  "query": "action:EDIT"
                }
              }
            ]
          }
        },
        {
          "bool": {
            "must": [
              {
                "range": {
                  "@timestamp": {
                    "from": 1612523952692,
                    "to": 1612545552693,
                    "format": "epoch_millis"
                  }
                }
              },
              {
                "query_string": {
                  "query": "action:EDIT"
                }
              }
            ]
          }
        }
      ]
    }
  }
}


Полный нерабочий запрос:
{
  "size": 10,
  "from": 0,
  "sort": [
    {
      "@timestamp": {
        "order": "desc"
      }
    }
  ],
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "filter": [
              {
                "range": {
                  "@timestamp": {
                    "from": 1612520405515,
                    "to": 1612542005515,
                    "format": "epoch_millis"
                  }
                }
              },
              {
                "query_string": {
                  "query": "changeSet:{'filteringRuleName':null}"
                }
              }
            ]
          }
        },
        {
          "bool": {
            "must": [
              {
                "range": {
                  "@timestamp": {
                    "from": 1612520405515,
                    "to": 1612542005515,
                    "format": "epoch_millis"
                  }
                }
              },
              {
                "query_string": {
                  "query": "changeSet:{'filteringRuleName':null}"
                }
              }
            ]
          }
        }
      ]
    }
  }
}
  • Вопрос задан
  • 87 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
akelsey
@akelsey
Пробуйте экранировать:
"query_string": { "query": "changeSet:{\'filteringRuleName\':null}"}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы