2015-11-21 46 views
1

我首次安裝了Searchkick和Elasticsearch。使用Searchkick和Elasticsearch加亮

我有基本的工作,並試圖包括highlight功能。

指數:

<%= form_tag books_path, method: :get do %> 
     <%= text_field_tag :q, nil %> 
    <% end %> 
    <div class="row"> 
     <div class="col-md-8"> 
     <% @books.each do |book| %> 
      <div class="media"> 
      <div class="media-body"> 
       <h4 class="media-heading"> 
       <%= link_to book.title, book %> 
       </h4> 
       <small> 
       <%= book.description %> 
       </small></br> 
       <% if policy(book).edit? %> 
       <%= link_to 'Edit', edit_book_path(book) %> 
       <% end %> 
      </div> 
      </div> 
     <% end %> 
     <%= paginate @books %> 
     </div> 
     <div class="col-md-4"> 
     <% if policy(Book.new).create? %> 
     <%= link_to "New Book", new_book_path, class: 'btn btn-success' %> 
     <% end %> 
     </div> 
    </div> 

控制器

 def index 
      query = params[:q].presence || "*" 
      @books = Book.search(query, field: [:title], highlight: {tag: "<strong>"}) 
      authorize @books 
     end 

型號

class Book < ActiveRecord::Base 
     require 'elasticsearch/model' 
     searchkick highlight: [:title, :description] 

我缺少什麼?

回答

2

我想通過Searchkick來突出顯示。

首先,在你的模型中包含searchkick。如下所示:

class Book < ActiveRecord::Base 
searchkick highlight: [:description] 
end 

其次,在控制器中包含高亮區域。我有一個單獨的搜索控制器爲多個模型。

class SearchesController < ApplicationController 
     def index 
     @book_searches = Book.search(params[:query], operator: "or", fields: [:description], highlight: {tag: "<strong>", fields: {description: {fragment_size: 100}}}) 
     @chapter_searches = Chapter.search(params[:query], operator: "or", fields: [:body], highlight: {tag: "<strong>", fields: {body: {fragment_size: 100}}}) 
     end 
    end 

三,在搜索索引視圖中包含高亮功能。

<% @book_searches.with_details.each do |book_search, details| %> 
     <% if book_search.class == Book %> 
     <h3><%= link_to book_search.title, [book_search] %></h3> 
     <p><%= simple_format details[:highlight][:description] %></p> 
     <% end %> 
    <% end %> 

不要忘記在每個循環中使用with_details。

+0

您的解決方案工作完美。感謝您的詳細描述。 – codingbear

相關問題