Я использую эластичный поиск для индексации своих документов.
Можно ли поручить ему возвращать только определенные поля вместо всего документа json, который он сохранил?
elasticsearch
user1199438
источник
источник
Ответы:
Ага! Используйте исходный фильтр . Если вы ищете с помощью JSON, это будет выглядеть примерно так:
В ES 2.4 и более ранних версиях вы также можете использовать опцию fields в API поиска :
Это устарело в ES 5+. И исходные фильтры в любом случае более мощные!
источник
Мне показались
get api
полезными документы для этого, особенно два раздела, Фильтрация источников и Поля : https://www.elastic.co/guide/en/elasticsearch/reference/7.3/docs-get.html#get-source- фильтрацияОни заявляют о фильтрации источника:
Который отлично подходил моему случаю использования. В итоге я просто отфильтровал источник (используя сокращение):
К вашему сведению, они указывают в документах о параметре fields :
Кажется, он обслуживает поля, которые были специально сохранены, где он помещает каждое поле в массив. Если указанные поля не были сохранены, они будут извлекать каждое из источника _source, что может привести к «медленному» поиску. У меня также были проблемы, пытаясь заставить его вернуть поля типа объекта.
Итак, в итоге, у вас есть два варианта, либо через фильтрацию источника, либо [сохраненные] поля.
источник
источник
В Elasticsearch 5.x вышеупомянутый подход устарел. Вы можете использовать подход _source, но в определенных ситуациях может иметь смысл сохранить поле. Например, если у вас есть документ с заголовком, датой и очень большим полем содержимого, вы можете извлечь только заголовок и дату без необходимости извлекать эти поля из большого поля _source:
В этом случае вы бы использовали:
См. Документацию о том, как проиндексировать сохраненные поля. Всегда рад за Upvote!
источник
источник
response_filtering
https://stackoverflow.com/a/35647027/844700
источник
Фильтрация источников
Позволяет контролировать, как поле _source возвращается при каждом попадании.
Ключевое слово «включает» определяет специфические поля.
источник
Запрос REST API GET может быть выполнен с параметром _source.
Пример запроса
отклик
}
источник
Да, с помощью исходного фильтра вы можете сделать это, вот документация по исходной фильтрации
Пример запроса
Выход будет
источник
В Java вы можете использовать setFetchSource следующим образом:
источник
Например, у вас есть документ с тремя полями:
Если вы хотите вернуться,
name
иscore
вы можете использовать следующую команду:Если вы хотите получить несколько полей, которые соответствуют шаблону:
Может быть, исключить некоторые поля:
источник
Используя Java API, я использую следующее, чтобы получить все записи из набора определенных полей:
источник