#ruby-on-rails #ruby #elasticsearch #ruby-on-rails-5
#ruby-on-rails #ruby #elasticsearch #ruby-on-rails-5
Вопрос:
Я использую gem elasticsearch_rails для выполнения запросов elasticsearch. У меня есть сопоставления, подобные этому
mapping do
indexes :id, type: 'keyword'
indexes :name, type: 'text'
indexes :slug, type: 'keyword'
indexes :variants, type: 'nested' do
indexes :id, type: 'keyword'
indexes :sku, type: 'keyword'
indexes :main, type: 'boolean'
indexes :price, type: 'float'
end
end
def as_indexed_json(options = {})
as_json(only: ['id', 'name', 'slug'],
include: {
variants: {
only: ['id', 'sku', 'main', 'price']
}
})
end
и то, что я пытаюсь сделать, это получить все «родительские» элементы, но без «вариантов». Я имею в виду, что я хочу получить все продукты без вариантов, даже если у них есть несколько вариантов.
Я пытаюсь это сделать, потому что, когда у меня есть продукт с большим количеством вариантов (fe. product с 2,5 тыс. вариантов), elasticsearch возвращает мне всю «коллекцию» (продукт и все его варианты), и если я собираюсь перечислить 20 продуктов с 2 тыс. вариантов каждый, это займет целую вечность.
Я извлекаю все продукты с помощью простого запроса Product.elasticsearch.search (‘*’)
С уважением.
Комментарии:
1. у меня нет опыта работы с ruby, но ключевое слово elasticsearch, которое вам нужно, — это «_source», где вы можете указать, что возвращать.
2. Да, вы были правы. Большое спасибо!
3. Я снова ответил ниже, было бы неплохо, если бы вы могли это принять 🙂
Ответ №1:
Чтобы не передавать все исходные данные, в elasticsearch используется ключевое слово «_source»https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html