Как сделать поле _source динамическим в шаблоне поиска elasticsearch?

При использовании поискового запроса в эластичном поиске мы определяем, какие поля нам нужны в ответе.

"_source": ["name", "age"]

И при работе с search templates мы должны установить значение полей _source при вставке шаблона поиска в ES Cluster.

"_source": ["name", "age"]

но проблема с шаблоном поиска заключается в том, что он всегда будет возвращать нам name and age, и чтобы получить другие поля, мы должны соответствующим образом изменить наш шаблон поиска.

Есть ли способ передать поля поиска от клиента, чтобы он возвращал только те поля, в ответ на которые задал пользователь? Я добился этого только для одного поля, например, если вы сделаете это

"_source": "{{field}}"

затем во время поиска по шаблону вы можете сделать это

POST index_name/_search/template
{
  "id": template_id,
  "params": {
    "field": "name"
  }
}

Этот поисковый запрос возвращает поле name в ответ, но я не смог найти способ передать его в виде массива или в другом формате, чтобы получить несколько полей.


person amitchauh4n    schedule 11.03.2021    source источник


Ответы (1)


Абсолютно!!

Ваш шаблон поиска должен выглядеть так:

"_source": {{#toJson}}fields{{/toJson}}

И тогда вы можете назвать это так:

POST index_name/_search/template
{
  "id": template_id,
  "params": {
    "fields": ["name"]
  }
}

Что он собирается сделать, так это преобразовать массив params.fields в JSON, чтобы сгенерированный запрос выглядел так:

"_source": ["name"]
person Val    schedule 11.03.2021
comment
_source: {{#toJson}}поля{{/toJson}} будут заключены в двойные кавычки? если нет, то это не будет действительным JSON, поэтому мне нужно загрузить шаблон поиска в виде строки? - person amitchauh4n; 11.03.2021
comment
Да, в этом случае шаблон необходимо сохранить в виде строки. - person Val; 11.03.2021
comment
эй спасибо большое :) - person amitchauh4n; 11.03.2021
comment
Круто, рад, что помогло! - person Val; 11.03.2021
comment
нет варианта без нарушения формата JSON? - person amitchauh4n; 11.03.2021
comment
Шаблоны поиска написаны с использованием синтаксиса усов, поэтому, поскольку {{#toJson}}...{{/toJson}} не является настоящим JSON, вместо него нужно использовать текст. Это проблема? - person Val; 11.03.2021
comment
нет человек просто любопытно. - person amitchauh4n; 11.03.2021
comment
я тоже хочу добавить туда условие, например, если кто-то не передает значение поля в запросе, тогда все значения должны быть возвращены для того, что я пытаюсь сделать =› ```{{#fields}} \source\ : {{# toJson}}fields{{/toJson}},{{/fields}}````, но это не помогает выдавать ошибку повторяющихся полей. - person amitchauh4n; 12.03.2021
comment
Формат не в читаемом формате, так как это однострочная строка. Как я могу сделать его в более читабельном формате? - person amitchauh4n; 16.03.2021
comment
Пожалуйста, создайте новый вопрос со ссылкой на этот вопрос, так как на него был дан ответ, и мы не должны обрабатывать слишком много тем в одной ветке. - person Val; 16.03.2021
comment
Привет, вы можете найти новую ссылку на вопрос к предыдущему вопросу, как мы можем отформатировать экранированное значение строки"> stackoverflow.com/questions/66656722/ - person amitchauh4n; 16.03.2021