Получить все записи без дочерних элементов, даже если они существуют в elasticsearch

#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