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 '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 "mongo_session_store-rails3", '3.0.6'
|
||||
gem 'nokogiri'
|
||||
# gem 'riddle', '1.3.3'
|
||||
# gem 'mongoid-sphinx', :github => 'Rulingcom/mongoid-sphinx', :require => 'mongoid_sphinx'
|
||||
gem 'tire'
|
||||
|
||||
gem 'fb_graph'
|
||||
gem 'rack-gridfs'
|
||||
|
@ -43,11 +46,6 @@ gem 'resque-restriction'
|
|||
# gem 'ruby-debug19'
|
||||
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 'sinatra'
|
||||
|
@ -95,7 +93,7 @@ group :test, :development do
|
|||
gem 'pry-debugger'
|
||||
gem 'debugger'
|
||||
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 "rspec", "~> 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) }
|
|
@ -10,16 +10,16 @@ class Panel::Announcement::FrontEnd::BulletinsController < OrbitWidgetController
|
|||
|
||||
def search_result
|
||||
if params[:search_query] == ""
|
||||
@bulletins = get_bulletins_for_index
|
||||
|
||||
@bulletins = get_bulletins_for_index
|
||||
else
|
||||
@search = Bulletin.solr_search do
|
||||
fulltext params[:search_query]
|
||||
with(:frontend_search,true)
|
||||
with(:available_lang).any_of([I18n.locale.to_s])
|
||||
end
|
||||
# @search = Bulletin.solr_search do
|
||||
# fulltext params[:search_query]
|
||||
# with(:frontend_search,true)
|
||||
# with(:available_lang).any_of([I18n.locale.to_s])
|
||||
# end
|
||||
# @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)
|
||||
end
|
||||
|
|
|
@ -47,6 +47,18 @@ class Panel::Announcement::Widget::BulletinsController < OrbitWidgetController
|
|||
# @categories = @module_app.categories.enabled
|
||||
|
||||
# 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
|
||||
|
||||
|
|
|
@ -3,9 +3,6 @@ class Bulletin
|
|||
include Mongoid::Document
|
||||
include Mongoid::Timestamps
|
||||
include Mongoid::MultiParameterAttributes
|
||||
# include Mongoid::FullTextSearch
|
||||
include Mongoid::Search
|
||||
include Sunspot::Mongoid2
|
||||
include Impressionist::Impressionable
|
||||
|
||||
include OrbitCategory::Categorizable
|
||||
|
@ -16,6 +13,9 @@ class Bulletin
|
|||
include OrbitModel::TimeFrame
|
||||
include OrbitTag::Taggable
|
||||
|
||||
include Tire::Model::Search
|
||||
include Tire::Model::Callbacks
|
||||
|
||||
is_impressionable :counter_cache => { :column_name => :view_count }
|
||||
|
||||
field :title, localize: true
|
||||
|
@ -39,33 +39,24 @@ class Bulletin
|
|||
|
||||
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
|
||||
|
||||
searchable do
|
||||
text :titles do
|
||||
title_translations.to_a.collect{|t| t[1]}
|
||||
end
|
||||
text :texts do
|
||||
text_translations.to_a.collect{|t| Nokogiri::HTML(t[1]).text}
|
||||
end
|
||||
|
||||
string :available_lang , :multiple => true do
|
||||
VALID_LOCALES.collect{|t| enabled_for_lang(t.to_sym) ? t : nil}.delete_if{|t| t.nil?}
|
||||
end
|
||||
|
||||
# text :text do
|
||||
# a = (title_translations["zh_tw"] + title_translations["en"])
|
||||
# a
|
||||
# end
|
||||
boolean :frontend_search do
|
||||
# ( !is_hidden && !is_pending && is_checked && !is_rejected )
|
||||
(!is_hidden)
|
||||
end
|
||||
|
||||
integer :view_count
|
||||
string :category_id
|
||||
end
|
||||
# def self.search(str, options={})
|
||||
# options[:limit] = options[:limit] || 50
|
||||
# # default limit: 50 (mongoDB default: 100)
|
||||
|
||||
# res = self.mongo_session.command({ text: self.collection.name,
|
||||
# search: str}.merge(options))
|
||||
|
||||
# # We shall now return a criteria of resulting objects!!
|
||||
# self.where(:id.in => res['results'].collect {|o| o['obj']['_id']})
|
||||
# end
|
||||
|
||||
def bulletin_category_with_title
|
||||
self.category.title
|
||||
|
@ -87,19 +78,19 @@ class Bulletin
|
|||
published_at.strftime("%B %Y")
|
||||
end
|
||||
|
||||
def self.search( search = nil, category_id = nil )
|
||||
if category_id.to_s.size > 0 and search.to_s.size > 0
|
||||
key = /#{search}/
|
||||
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
|
||||
find(:all, :conditions => {category_id: category_id}).desc( :is_top, :postdate )
|
||||
elsif search.to_s.size > 0 and category_id.to_s.size < 1
|
||||
key = /#{search}/
|
||||
find(:all, :conditions => {title: key}).desc( :is_top, :postdate )
|
||||
else
|
||||
find(:all).desc( :is_top, :postdate)
|
||||
end
|
||||
end
|
||||
# def self.search( search = nil, category_id = nil )
|
||||
# if category_id.to_s.size > 0 and search.to_s.size > 0
|
||||
# key = /#{search}/
|
||||
# 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
|
||||
# find(:all, :conditions => {category_id: category_id}).desc( :is_top, :postdate )
|
||||
# elsif search.to_s.size > 0 and category_id.to_s.size < 1
|
||||
# key = /#{search}/
|
||||
# find(:all, :conditions => {title: key}).desc( :is_top, :postdate )
|
||||
# else
|
||||
# find(:all).desc( :is_top, :postdate)
|
||||
# end
|
||||
# end
|
||||
|
||||
|
||||
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 :tag_id, params[:tag_id] %>
|
||||
<p>
|
||||
|
|
|
@ -27,7 +27,7 @@ Rails.application.routes.draw do
|
|||
end
|
||||
namespace :front_end do
|
||||
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
|
||||
# match "preview" => "bulletins#preview_content",:as => :get_preview_content
|
||||
# end
|
||||
|
@ -39,6 +39,7 @@ Rails.application.routes.draw do
|
|||
match "reload_web_links" => "bulletins#reload_web_links"
|
||||
match "bulletins_side_bar" => "bulletins#bulletins_side_bar"
|
||||
match "bulletins_search_block" => "bulletins#bulletins_search_block"
|
||||
match "search_result" => "bulletins#search_result"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -7,10 +7,12 @@ class Panel::Archive::FrontEnd::ArchiveFilesController < OrbitWidgetController
|
|||
end
|
||||
|
||||
def get_search_result
|
||||
@search = ArchiveFileCategory.solr_search do
|
||||
fulltext params[:search_query]
|
||||
with(:frontend_search,true)
|
||||
end
|
||||
# @search = ArchiveFileCategory.solr_search do
|
||||
# fulltext params[:search_query]
|
||||
# with(:frontend_search,true)
|
||||
# end
|
||||
|
||||
@search = ArchiveFile.search(params[:search_query])
|
||||
|
||||
search_result = @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::MultiParameterAttributes
|
||||
include Mongoid::Sortable
|
||||
include Sunspot::Mongoid2
|
||||
|
||||
include OrbitCategory::Categorizable
|
||||
include OrbitModel::LanguageRestrict
|
||||
|
@ -12,6 +11,9 @@ class ArchiveFile
|
|||
include OrbitModel::TimeFrame
|
||||
include OrbitTag::Taggable
|
||||
|
||||
include Tire::Model::Search
|
||||
include Tire::Model::Callbacks
|
||||
|
||||
# BelongsToCategory = :archive_file_category
|
||||
|
||||
# PAYMENT_TYPES = @site_valid_locales
|
||||
|
@ -33,6 +35,12 @@ class ArchiveFile
|
|||
|
||||
after_save :save_archive_file_multiples
|
||||
|
||||
def to_indexed_json
|
||||
self.to_json
|
||||
end
|
||||
|
||||
# search_in :title
|
||||
|
||||
# searchable do
|
||||
# text :titles do
|
||||
# title_translations.to_a.collect{|t| t[1]}
|
||||
|
@ -44,19 +52,19 @@ class ArchiveFile
|
|||
# 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
|
||||
|
|
Reference in New Issue