如何使用Sequel full_text_search使用多个单词的短语进行全文搜索?

时间:2014-02-14 07:19:52

标签: ruby postgresql sequel

我正在使用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个或更多单词的短语执行全文搜索(如上所述)?

我已经尝试使用''封装传递的参数。和""不成功。

感谢所有的帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

PostgreSQL的全文搜索本身并不处理短语搜索。您可以做的最好的事情是使用&full_text_search(:experience, 'term1 & term2')查找包含这两个字词的条目,如果您想要进行实际的词组搜索,请使用LIKE '%term1 term2%'

我会考虑向:phrase=>true添加full_text_search选项,以便将其作为词组搜索。