您選擇的Ruby-on-Rails的是傾向於針對此問題:
- 存儲每個日記條目作爲數據庫條目
- 使用「全文搜索」搜索這些條目 - 無論是在DB或第三方
- 返回 「活」 的功能與JS
MVC
Rails使用MVC
programming pattern給你的能力來保存到數據庫中。
基本上,你把你的日記在database
,使用controller
操作:因爲如果你打算在軌道發展,你需要保持MVC模式這一點很重要數據&使用view
來顯示數據:
#app/models/entry.rb
Class Entry < ActiveRecord::Base
#-> stores & brings back the entry data
end
#app/controllers/entries_controller.rb
Class EntriesController < ApplicationController
respond_to :js, :html, :json, only: :search
def index
@entries = Entry.all
end
def search
@entries = Entry.search params[:query]
respond_with @entries
end
end
#config/routes.rb
resources :entries do
collection do
match :search, via [:get, :post]
end
end
-
全文檢索
當你發送請求到你的控制器,你會處理的搜索將在您的項目模型class method(也就是您從您的數據)的方式,無論是引用 -
#app/models/entry.rb
Class Entry < ActiveRecord::Base
def self.search(query)
where("title LIKE '%#{query}%'")
end
end
您可以使用您正在使用full text search for the SQL變種,或者使用第三方搜索,像Solr什麼
-
「活」搜索
你可以得到(例如here) 「活」 的搜索使用JavaScript:
有關於如何做到這一點網上一個number of tutorials - 只是谷歌live search rails
或autocomplete rails
。然而,原理是基本相同的所有的實現:
- JS將捕獲文本輸入到搜索框中
- JS發送Ajax請求到你的Rails控制器
- 控制器發送響應阿賈克斯
- JS需要響應&在屏幕上顯示
ñ otice如何這主要集中在JS元素?下面的代碼,我們使用:
#app/assets/javascripts/application.js
//Livesearch
$(document).ready(function() {
var base_url = window.location.protocol + "//" + window.location.host;
$('#SearchSearch').searchbox({
url: base_url + '/search/',
param: 'search',
dom_id: '#livesearch',
loading_css: '#livesearch_loading'
})
});
#app/assets/javascripts/livesearch.js
// Author: Ryan Heath
// http://rpheath.com
(function($) {
$.searchbox = {}
$.extend(true, $.searchbox, {
settings: {
url: 'search',
param: 'search',
dom_id: '#livesearch',
minChars: 2,
loading_css: '#livesearch_loading',
del_id: '#livesearch_del'
},
loading: function() {
$($.searchbox.settings.loading_css).show()
},
idle: function() {
$($.searchbox.settings.loading_css).hide()
},
start: function() {
$.searchbox.loading()
$(document).trigger('before.searchbox')
},
stop: function() {
$.searchbox.idle()
$(document).trigger('after.searchbox')
},
kill: function() {
$($.searchbox.settings.dom_id).fadeOut(50)
$($.searchbox.settings.dom_id).html('')
$($.searchbox.settings.del_id).fadeOut(100)
},
reset: function() {
$($.searchbox.settings.dom_id).html('')
$($.searchbox.settings.dom_id).fadeOut(50)
$('#SearchSearch').val('')
$($.searchbox.settings.del_id).fadeOut(100)
},
process: function(terms) {
if(/\S/.test(terms)) {
$.ajax({
type: 'GET',
url: $.searchbox.settings.url,
data: {search: terms.trim()},
complete: function(data) {
$($.searchbox.settings.del_id).fadeIn(50)
$($.searchbox.settings.dom_id).html(data.responseText)
if (!$($.searchbox.settings.dom_id).is(':empty')) {
$($.searchbox.settings.dom_id).fadeIn(100)
}
$.searchbox.stop();
}
});
return false;
}else{
$.searchbox.kill();
}
}
});
$.fn.searchbox = function(config) {
var settings = $.extend(true, $.searchbox.settings, config || {})
$(document).trigger('init.searchbox')
$.searchbox.idle()
return this.each(function() {
var $input = $(this)
$input
.keyup(function() {
if ($input.val() != this.previousValue) {
if(/\S/.test($input.val().trim()) && $input.val().trim().length > $.searchbox.settings.minChars){
$.searchbox.start()
$.searchbox.process($input.val())
}else{
$.searchbox.kill()
}
this.previousValue = $input.val()
}
})
})
}
})(jQuery);
聽起來像是你需要分析的東西,你可以索引文件(你喜歡的任何語言),存儲和實現全文搜索(SQL數據庫和elasticsearch),並使用自動完成的客戶端搜索(JavaScript)。 –