我正在使用ruby,Sequel和postgres。我已经实现了全文搜索,如下所示:
get '/full_text_search' do
search_term = params[:search_term]
result = DB[:candidates].full_text_search(:experience, search_term).map do |row|
{ :id => row[:id], :first => row[:first], :last => row[:last], :designation => row[:designation], :company => row[:company], :email => row[:email], :phone => row[:phone], :city => row[:city], :country => row[:country], :industry => row[:industry], :status => row[:status], :remarks => row[:remarks], :experience => row[:experience] }
end
halt 200, result.to_json
end
这是通过从文本框传递搜索词,通过ajax调用来执行的,所以:
$(document).ready(function(){
$("#full_text_search").click(function(){
var search_term = $("#search_box").val();
$.getJSON("/full_text_search?search_term="+search_term, function(data) {
$.each( data, function( key, value ) {
//do something with returned data here
});//end each
});//end getJSON
});//end click
});//end doc
如果我的搜索字词只有一个字,那么"私有"例如,我得到的结果没有问题,但如果我尝试搜索词为2个字(或更多)"私募股权",例如,我收到一个错误,没有返回任何数据。
所以我的问题是如何使用2个或更多单词的短语执行全文搜索(如上所述)?
我已经尝试使用''封装传递的参数。和""不成功。
感谢所有的帮助。谢谢。
答案 0 :(得分:1)
PostgreSQL的全文搜索本身并不处理短语搜索。您可以做的最好的事情是使用&
:full_text_search(:experience, 'term1 & term2')
查找包含这两个字词的条目,如果您想要进行实际的词组搜索,请使用LIKE '%term1 term2%'
。
我会考虑向:phrase=>true
添加full_text_search
选项,以便将其作为词组搜索。