Changed Search to Elastic Search
This commit is contained in:
parent
fd24fbe082
commit
84edbdb6db
12
Gemfile
12
Gemfile
|
@ -26,10 +26,13 @@ gem "geocoder"
|
||||||
|
|
||||||
gem 'mini_magick'
|
gem 'mini_magick'
|
||||||
gem 'mongoid', '> 2.1', '< 3.0.0'
|
gem 'mongoid', '> 2.1', '< 3.0.0'
|
||||||
gem 'mongoid_search', '~> 0.2.8'
|
# gem 'mongoid_search', :github => 'mauriciozaffari/mongoid_search', :branch => 'mongoid_2.x.x'
|
||||||
gem 'mongoid-tree', :require => 'mongoid/tree'
|
gem 'mongoid-tree', :require => 'mongoid/tree'
|
||||||
gem "mongo_session_store-rails3", '3.0.6'
|
gem "mongo_session_store-rails3", '3.0.6'
|
||||||
gem 'nokogiri'
|
gem 'nokogiri'
|
||||||
|
# gem 'riddle', '1.3.3'
|
||||||
|
# gem 'mongoid-sphinx', :github => 'Rulingcom/mongoid-sphinx', :require => 'mongoid_sphinx'
|
||||||
|
gem 'tire'
|
||||||
|
|
||||||
gem 'fb_graph'
|
gem 'fb_graph'
|
||||||
gem 'rack-gridfs'
|
gem 'rack-gridfs'
|
||||||
|
@ -43,11 +46,6 @@ gem 'resque-restriction'
|
||||||
# gem 'ruby-debug19'
|
# gem 'ruby-debug19'
|
||||||
gem 'rubyzip', '< 1.0.0'
|
gem 'rubyzip', '< 1.0.0'
|
||||||
|
|
||||||
gem 'sunspot_mongoid2'
|
|
||||||
# gem 'sunspot_mongo'
|
|
||||||
gem 'sunspot_solr', github: 'sunspot/sunspot', branch: 'master'
|
|
||||||
gem 'sunspot_rails', github: 'sunspot/sunspot', branch: 'master'
|
|
||||||
|
|
||||||
gem 'progress_bar'
|
gem 'progress_bar'
|
||||||
|
|
||||||
gem 'sinatra'
|
gem 'sinatra'
|
||||||
|
@ -95,7 +93,7 @@ group :test, :development do
|
||||||
gem 'pry-debugger'
|
gem 'pry-debugger'
|
||||||
gem 'debugger'
|
gem 'debugger'
|
||||||
gem 'faker'
|
gem 'faker'
|
||||||
gem "sunspot-rails-tester"
|
# gem "sunspot-rails-tester"
|
||||||
gem 'database_cleaner' #Strategies for cleaning databases. Can be used to ensure a clean state for testing.
|
gem 'database_cleaner' #Strategies for cleaning databases. Can be used to ensure a clean state for testing.
|
||||||
gem "rspec", "~> 2.0"
|
gem "rspec", "~> 2.0"
|
||||||
gem "rspec-rails", "~> 2.0"
|
gem "rspec-rails", "~> 2.0"
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
Sunspot.session = Sunspot::Rails.build_session
|
|
||||||
ActionController::Base.module_eval { include(Sunspot::Rails::RequestLifecycle) }
|
|
|
@ -11,15 +11,15 @@ class Panel::Announcement::FrontEnd::BulletinsController < OrbitWidgetController
|
||||||
def search_result
|
def search_result
|
||||||
if params[:search_query] == ""
|
if params[:search_query] == ""
|
||||||
@bulletins = get_bulletins_for_index
|
@bulletins = get_bulletins_for_index
|
||||||
|
|
||||||
else
|
else
|
||||||
@search = Bulletin.solr_search do
|
# @search = Bulletin.solr_search do
|
||||||
fulltext params[:search_query]
|
# fulltext params[:search_query]
|
||||||
with(:frontend_search,true)
|
# with(:frontend_search,true)
|
||||||
with(:available_lang).any_of([I18n.locale.to_s])
|
# with(:available_lang).any_of([I18n.locale.to_s])
|
||||||
end
|
# end
|
||||||
# @bulletins = Bulletin.where(:category_id.in => params[:category_id]).and(:is_rejected=>false).and(:is_pending=>false)
|
# @bulletins = Bulletin.where(:category_id.in => params[:category_id]).and(:is_rejected=>false).and(:is_pending=>false)
|
||||||
search_result = @search.results.collect{|result| result.id}
|
@search = Bulletin.tire.search "#{params[:search_query]}"
|
||||||
|
search_result = @search.collect{|result| result.id}
|
||||||
|
|
||||||
@bulletins = Bulletin.all.available_for_lang(I18n.locale).can_display.any_in(_id:search_result).page( params[:page_main]).per(@page_num)
|
@bulletins = Bulletin.all.available_for_lang(I18n.locale).can_display.any_in(_id:search_result).page( params[:page_main]).per(@page_num)
|
||||||
end
|
end
|
||||||
|
|
|
@ -48,6 +48,18 @@ class Panel::Announcement::Widget::BulletinsController < OrbitWidgetController
|
||||||
|
|
||||||
# end
|
# end
|
||||||
|
|
||||||
|
def search_result
|
||||||
|
if params[:search_query] == ""
|
||||||
|
redirect_to panel_announcement_front_end_search_result_path
|
||||||
|
else
|
||||||
|
@search = Bulletin.tire.search "#{params[:search_query]}"
|
||||||
|
search_result = @search.collect{|result| result.id}
|
||||||
|
|
||||||
|
@bulletins = Bulletin.all.available_for_lang(I18n.locale).can_display.any_in(_id:search_result).page( params[:page_main]).per(@page_num)
|
||||||
|
redirect_to panel_announcement_front_end_search_result_path(params[:search_result])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def bulletins_list_and_pic
|
def bulletins_list_and_pic
|
||||||
|
|
||||||
if params[:widget_data_count]
|
if params[:widget_data_count]
|
||||||
|
|
|
@ -3,9 +3,6 @@ class Bulletin
|
||||||
include Mongoid::Document
|
include Mongoid::Document
|
||||||
include Mongoid::Timestamps
|
include Mongoid::Timestamps
|
||||||
include Mongoid::MultiParameterAttributes
|
include Mongoid::MultiParameterAttributes
|
||||||
# include Mongoid::FullTextSearch
|
|
||||||
include Mongoid::Search
|
|
||||||
include Sunspot::Mongoid2
|
|
||||||
include Impressionist::Impressionable
|
include Impressionist::Impressionable
|
||||||
|
|
||||||
include OrbitCategory::Categorizable
|
include OrbitCategory::Categorizable
|
||||||
|
@ -16,6 +13,9 @@ class Bulletin
|
||||||
include OrbitModel::TimeFrame
|
include OrbitModel::TimeFrame
|
||||||
include OrbitTag::Taggable
|
include OrbitTag::Taggable
|
||||||
|
|
||||||
|
include Tire::Model::Search
|
||||||
|
include Tire::Model::Callbacks
|
||||||
|
|
||||||
is_impressionable :counter_cache => { :column_name => :view_count }
|
is_impressionable :counter_cache => { :column_name => :view_count }
|
||||||
|
|
||||||
field :title, localize: true
|
field :title, localize: true
|
||||||
|
@ -39,33 +39,24 @@ class Bulletin
|
||||||
|
|
||||||
validates :title, :at_least_one => true
|
validates :title, :at_least_one => true
|
||||||
|
|
||||||
search_in :title, :subtitle, :text
|
def to_indexed_json
|
||||||
|
self.to_json
|
||||||
|
end
|
||||||
|
|
||||||
|
# search_in :title, :subtitle, :text
|
||||||
|
|
||||||
#before_save :clean_values, :save_bulletin_links, :save_bulletin_files
|
#before_save :clean_values, :save_bulletin_links, :save_bulletin_files
|
||||||
|
|
||||||
searchable do
|
# def self.search(str, options={})
|
||||||
text :titles do
|
# options[:limit] = options[:limit] || 50
|
||||||
title_translations.to_a.collect{|t| t[1]}
|
# # default limit: 50 (mongoDB default: 100)
|
||||||
end
|
|
||||||
text :texts do
|
|
||||||
text_translations.to_a.collect{|t| Nokogiri::HTML(t[1]).text}
|
|
||||||
end
|
|
||||||
|
|
||||||
string :available_lang , :multiple => true do
|
# res = self.mongo_session.command({ text: self.collection.name,
|
||||||
VALID_LOCALES.collect{|t| enabled_for_lang(t.to_sym) ? t : nil}.delete_if{|t| t.nil?}
|
# search: str}.merge(options))
|
||||||
end
|
|
||||||
|
|
||||||
# text :text do
|
# # We shall now return a criteria of resulting objects!!
|
||||||
# a = (title_translations["zh_tw"] + title_translations["en"])
|
# self.where(:id.in => res['results'].collect {|o| o['obj']['_id']})
|
||||||
# a
|
|
||||||
# end
|
# end
|
||||||
boolean :frontend_search do
|
|
||||||
# ( !is_hidden && !is_pending && is_checked && !is_rejected )
|
|
||||||
(!is_hidden)
|
|
||||||
end
|
|
||||||
|
|
||||||
integer :view_count
|
|
||||||
string :category_id
|
|
||||||
end
|
|
||||||
|
|
||||||
def bulletin_category_with_title
|
def bulletin_category_with_title
|
||||||
self.category.title
|
self.category.title
|
||||||
|
@ -87,19 +78,19 @@ class Bulletin
|
||||||
published_at.strftime("%B %Y")
|
published_at.strftime("%B %Y")
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.search( search = nil, category_id = nil )
|
# def self.search( search = nil, category_id = nil )
|
||||||
if category_id.to_s.size > 0 and search.to_s.size > 0
|
# if category_id.to_s.size > 0 and search.to_s.size > 0
|
||||||
key = /#{search}/
|
# key = /#{search}/
|
||||||
find(:all, :conditions => {title: key, category_id: category_id}).desc( :is_top, :postdate )
|
# find(:all, :conditions => {title: key, category_id: category_id}).desc( :is_top, :postdate )
|
||||||
elsif category_id.to_s.size > 0 and search.to_s.size < 1
|
# elsif category_id.to_s.size > 0 and search.to_s.size < 1
|
||||||
find(:all, :conditions => {category_id: category_id}).desc( :is_top, :postdate )
|
# find(:all, :conditions => {category_id: category_id}).desc( :is_top, :postdate )
|
||||||
elsif search.to_s.size > 0 and category_id.to_s.size < 1
|
# elsif search.to_s.size > 0 and category_id.to_s.size < 1
|
||||||
key = /#{search}/
|
# key = /#{search}/
|
||||||
find(:all, :conditions => {title: key}).desc( :is_top, :postdate )
|
# find(:all, :conditions => {title: key}).desc( :is_top, :postdate )
|
||||||
else
|
# else
|
||||||
find(:all).desc( :is_top, :postdate)
|
# find(:all).desc( :is_top, :postdate)
|
||||||
end
|
# end
|
||||||
end
|
# end
|
||||||
|
|
||||||
|
|
||||||
def self.widget_datas( category_id = nil )
|
def self.widget_datas( category_id = nil )
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
<%= form_tag panel_announcement_front_end_announcement_search_path, method: :get do %>
|
<p>Search</p>
|
||||||
|
<%= form_tag panel_announcement_widget_search_result_path, method: :get do %>
|
||||||
<%= hidden_field_tag :category_id, params[:category_id] %>
|
<%= hidden_field_tag :category_id, params[:category_id] %>
|
||||||
<%= hidden_field_tag :tag_id, params[:tag_id] %>
|
<%= hidden_field_tag :tag_id, params[:tag_id] %>
|
||||||
<p>
|
<p>
|
||||||
|
|
|
@ -27,7 +27,7 @@ Rails.application.routes.draw do
|
||||||
end
|
end
|
||||||
namespace :front_end do
|
namespace :front_end do
|
||||||
match "index_by_unit" => "bulletins#index_bulletins_by_unit",:as => :index_bulletins_by_unit
|
match "index_by_unit" => "bulletins#index_bulletins_by_unit",:as => :index_bulletins_by_unit
|
||||||
match "search_result" => "bulletins#search_result",:as=>:announcement_search
|
match "search_result" => "bulletins#search_result"
|
||||||
resources :bulletins # do
|
resources :bulletins # do
|
||||||
# match "preview" => "bulletins#preview_content",:as => :get_preview_content
|
# match "preview" => "bulletins#preview_content",:as => :get_preview_content
|
||||||
# end
|
# end
|
||||||
|
@ -39,6 +39,7 @@ Rails.application.routes.draw do
|
||||||
match "reload_web_links" => "bulletins#reload_web_links"
|
match "reload_web_links" => "bulletins#reload_web_links"
|
||||||
match "bulletins_side_bar" => "bulletins#bulletins_side_bar"
|
match "bulletins_side_bar" => "bulletins#bulletins_side_bar"
|
||||||
match "bulletins_search_block" => "bulletins#bulletins_search_block"
|
match "bulletins_search_block" => "bulletins#bulletins_search_block"
|
||||||
|
match "search_result" => "bulletins#search_result"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,10 +7,12 @@ class Panel::Archive::FrontEnd::ArchiveFilesController < OrbitWidgetController
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_search_result
|
def get_search_result
|
||||||
@search = ArchiveFileCategory.solr_search do
|
# @search = ArchiveFileCategory.solr_search do
|
||||||
fulltext params[:search_query]
|
# fulltext params[:search_query]
|
||||||
with(:frontend_search,true)
|
# with(:frontend_search,true)
|
||||||
end
|
# end
|
||||||
|
|
||||||
|
@search = ArchiveFile.search(params[:search_query])
|
||||||
|
|
||||||
search_result = @search.results.collect{|result| result.id}
|
search_result = @search.results.collect{|result| result.id}
|
||||||
params[:category_id] = @search.results.collect{|result| result.id}
|
params[:category_id] = @search.results.collect{|result| result.id}
|
||||||
|
|
|
@ -4,7 +4,6 @@ class ArchiveFile
|
||||||
include Mongoid::Timestamps
|
include Mongoid::Timestamps
|
||||||
include Mongoid::MultiParameterAttributes
|
include Mongoid::MultiParameterAttributes
|
||||||
include Mongoid::Sortable
|
include Mongoid::Sortable
|
||||||
include Sunspot::Mongoid2
|
|
||||||
|
|
||||||
include OrbitCategory::Categorizable
|
include OrbitCategory::Categorizable
|
||||||
include OrbitModel::LanguageRestrict
|
include OrbitModel::LanguageRestrict
|
||||||
|
@ -12,6 +11,9 @@ class ArchiveFile
|
||||||
include OrbitModel::TimeFrame
|
include OrbitModel::TimeFrame
|
||||||
include OrbitTag::Taggable
|
include OrbitTag::Taggable
|
||||||
|
|
||||||
|
include Tire::Model::Search
|
||||||
|
include Tire::Model::Callbacks
|
||||||
|
|
||||||
# BelongsToCategory = :archive_file_category
|
# BelongsToCategory = :archive_file_category
|
||||||
|
|
||||||
# PAYMENT_TYPES = @site_valid_locales
|
# PAYMENT_TYPES = @site_valid_locales
|
||||||
|
@ -33,6 +35,12 @@ class ArchiveFile
|
||||||
|
|
||||||
after_save :save_archive_file_multiples
|
after_save :save_archive_file_multiples
|
||||||
|
|
||||||
|
def to_indexed_json
|
||||||
|
self.to_json
|
||||||
|
end
|
||||||
|
|
||||||
|
# search_in :title
|
||||||
|
|
||||||
# searchable do
|
# searchable do
|
||||||
# text :titles do
|
# text :titles do
|
||||||
# title_translations.to_a.collect{|t| t[1]}
|
# title_translations.to_a.collect{|t| t[1]}
|
||||||
|
@ -44,19 +52,19 @@ class ArchiveFile
|
||||||
# end
|
# end
|
||||||
|
|
||||||
|
|
||||||
def self.search( category_id = nil )
|
# def self.search( category_id = nil )
|
||||||
|
|
||||||
if category_id.to_s.size > 0
|
# if category_id.to_s.size > 0
|
||||||
|
|
||||||
find(:all, :conditions => {archive_file_category_id: category_id}).desc( :is_top, :title )
|
# find(:all, :conditions => {archive_file_category_id: category_id}).desc( :is_top, :title )
|
||||||
|
|
||||||
else
|
# else
|
||||||
|
|
||||||
find(:all).desc( :is_top, :title)
|
# find(:all).desc( :is_top, :title)
|
||||||
|
|
||||||
end
|
# end
|
||||||
|
|
||||||
end
|
# end
|
||||||
|
|
||||||
|
|
||||||
def self.widget_datas
|
def self.widget_datas
|
||||||
|
|
Reference in New Issue