使用 Searchkick 和 Elasticsearch 突出显示
Highlight with Searchkick and 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]
我错过了什么?
我想出了如何使用 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。
第一次安装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]
我错过了什么?
我想出了如何使用 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。