Фильтрация ассоциации в результатах поиска с использованием rails sunspot - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть эта модель

class Subject
  has_many: contents
  has_many: titles, :through => :contents

  searchable do
    text :titles, :default_boost => 5, :stored => true do
      my_titles = titles.map { |title| title.try(:name) }

      if my_titles.present?
        my_titles += titles.map do |title|
          title.path.map { |title| title.try(:name) }
        end
      end

      my_titles.flatten.uniq.join(" ")
    end
  end
end

class Title
  has_ancestry
end

Когда я ищу предмет, он работает нормально, но мне нужно добавить функцию, чтобы удалить ненужные заголовки на мой взгляд. Например, когда я ищу предмет с именем «Биология человека», я получаю результат

Subject: Science 1
Titles: 
  - Environmental Science >> Human Biology # <-----this record need to stay
  - Chemistry 1 >> Chemistry 2 # <-----remove this
  - Physics 1 >> Physics 2 # <-----remove this

Subject: Science 2
Titles:
    Environmental Science >> Human Biology # <-----this record need to stay
    Chemistry 1 >> Chemistry 2 # <-----remove this

Предметы появляются в моих результатах поиска, в то время как мне нужно отфильтровать заголовки на основе того, что я искал.

Вот мой взгляд:

<% @subjects.each_hit_with_result.each do |hit, subject| %>
  <% subject.titles.uniq.each do |title| %>
    <br/>
    <%=raw title.path.map {|e| link_to("#{e.name}", contents_url(:title => e.id) )}.join(' > ') %>
    <br/>
    <% end %>
  <% end %>
<% end %>

Я пытался получить параметры поиска и использовать функцию выбора, но я думаю, что это неправильная реализация.

1 Ответ

0 голосов
/ 30 апреля 2020

Полагаю, это поможет вам сделать правильный поиск.

Примерно так

searchable do
  text :name
  join(:titles, target: Title, type: :text, join: { from: :subject_id, to: :id })
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...