SearchKick search_data против поиска

Ради этого вопроса, скажем, у меня есть две модели:

  • Book, который имеет name, created_at, updated_at и связанную модель Author.
  • Author, у которого есть name и birthdate.

Для целей поиска я хочу выполнить два разных поиска:

  • Найдите Book по их name или author.name
  • Найдите Author по их name

  1. Требуется ли search_data, если у меня есть только прямые сопоставления полей модели с полями ElasticSearch? Например, достаточно ли на моей модели Author иметь только searchkick searchable %i[name] или мне также нужно:
def search_data
  {
    name: name
  }
end
  1. Как вы определяете вложенные данные в Searchkick для поиска Book Author.name? В настоящее время я бы сделал что-то подобное, однако, похоже, из раздела Вложенные данные из README, что может быть другой способ сделать то же самое.
def search_data
  {
    name: name,
    author_name: author.name
  }
end
  1. Что, если бы у Book было много Author? Каков предлагаемый способ поиска книги по любому из имен ее авторов? Что-то вроде этого - лучшее, что я мог придумать до сих пор:
def search_data
  {
    name: name,
    author_names: author.pluck(:name)
  }
end

person s_dolan    schedule 04.05.2018    source источник


Ответы (1)


  1. Если вам нужны только поля модели, вам не нужно определять search_data. Searchkick делает это автоматически. Вы можете проверить это с помощью Author.first.search_data.

  2. Searchkick имеет ограниченную поддержку вложенных данных. Пример, который вы привели, выглядит хорошо.

  3. Это именно то, что предлагается для нескольких авторов.

person Andrew Kane    schedule 09.08.2018