У меня вопрос по многоуровневому поиску в Elasticsearch:
У меня есть Ruby от Rails API, с ActiveRecord, вместе с Elasticsearch (камень эластичной модели упругого поиска).
Это просто API, который возвращает проекты (модель Project AR), которые belongs_to
модель AR категории, где я устанавливаю индексы:
mapping dynamic: false do
indexes :created_at, type: 'date'
indexes :due_date, type: 'date'
indexes :category do
indexes :id, type: :text
indexes :name, type: :text, analyzer: 'english'
end
end
, где модель категории has_many projects
, которая является собственной ссылкой, выглядит так:
Category id: "25cd43a2-bc03-4fa7-977e-df1b6c6a5c65", name: "Nature", description: nil, parent_id: nil, created_at: "2020-02-27 18:06:57", updated_at: "2020-02-27 18:06:57
Как видите, если нет parent_id, тогда Категория является главной категорией, а когда есть parent_id, это означает, что это подкатегория:
=> #<V1::Category id: "6e41c695-8a43-4be5-974b-95fb29e2bb25", name: "Forest", description: nil, parent_id: "25cd43a2-bc03-4fa7-977e-df1b6c6a5c65", created_at: "2020-02-27 18:07:33", updated_at: "2020-02-27 18:07:33">
Вопрос в том, как получить все проекты. из "Природы", которая также состоит из подкатегории Forest. Так что если "Nature".
Если я просто сделаю это в Elasticsearch:
2020-02-27 19:20:14 +0100: > {"from":0,"size":10,"query":{"bool":{"should":[{"match":{"category.name":"Nature"}}]}},"sort":[{"created_at":"desc"}]}
, я получу только результат из категории nature
без вложенных проектов подкатегорий. Моя другая идея заключалась в том, чтобы получить все предыдущие подкатегории из AR и создать "should":[{"match":{"category.name":"Put_category_name_here"}]
объекты, но это должно быть что-то из Elasticsearch для решения, например, проблемы.
Заранее спасибо!