Обработка многоуровневого поиска в Elasticsearch - PullRequest
0 голосов
/ 27 февраля 2020

У меня вопрос по многоуровневому поиску в 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 для решения, например, проблемы.

Заранее спасибо!

...