SearchKick search_data против поиска - PullRequest
0 голосов
/ 05 мая 2018

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

  • 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 s 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

1 Ответ

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

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

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

...