2013-10-04 87 views
0

我創建了一個使用2列(姓名和姓氏)的搜索應用程序,但在人名超過2個時不起作用。我如何搜索一個具有3個姓名和姓氏的人?多文本搜索問題

控制器:

class PersonController < ApplicationController 

def search 

    @people = Person.find(:all,:conditions=>["(
               name LIKE ? OR 
              lastname LIKE ? OR 
         (concat(name, \" \", lastname) LIKE ?) 
              )" , 
              "%#{params[:query]}%", 
              "%#{params[:query]}%", 
              "%#{params[:query]}%" ] 
              ) 
    end 

end 

查看

<% form_tag :controller=>"person",:action=>"search" do %> 
    Nombre o Apellido 
    <%= text_field_tag "query", params[:query] 
<% end %> 

|name|    |Lastname| 
Marcos Ignacio Raul Perez 

我在我的日誌此看到: 工作,如果我搜索馬科斯·伊格納西奧·佩雷斯勞爾

SELECT * FROM `people` 
WHERE ((
name LIKE '%Marcos Ignacio Raul Perez%' OR 
lastname LIKE '%Marcos Ignacio Raul Perez%' 
OR (concat(name, " ", lastname) LIKE '%Marcos Ignacio Raul Perez%') 
)) 

工作,如果我搜索伊格納西奧·佩雷斯勞爾

SELECT * FROM `people` 
WHERE ((
name LIKE '%Ignacio Raul Perez%' OR 
lastname LIKE '%Ignacio Raul Perez%' 
OR (concat(name, " ", lastname) LIKE 'Ignacio Raul Perez%') 
)) 

工作,如果我搜索勞爾·佩雷斯

SELECT * FROM `people` 
WHERE ((
name LIKE '%Raul Perez%' OR 
lastname LIKE '%Raul Perez%' 
OR (concat(name, " ", lastname) LIKE 'Perez%') 
)) 

如果我搜索馬科斯·佩雷斯

SELECT * FROM `people` 
WHERE ((
name LIKE '%Marcos Perez%' OR 
lastname LIKE '%Marcos Perez%' 
OR (concat(name, " ", lastname) LIKE '%Marcos Perez%') 
)) 

不會不工作工作,如果我搜索伊格納西奧佩雷斯

SELECT * FROM `people` 
WHERE ((
name LIKE '%Ignacio Perez%' OR 
lastname LIKE '%Marcos Perez%' 
OR (concat(name, " ", lastname) LIKE '%Ignacio Perez%') 
)) 

如果我搜索馬科斯勞爾·佩雷斯

SELECT * FROM `people` 
WHERE ((
name LIKE '%Marcos Raul Perez%' OR 
lastname LIKE '%Marcos Raul Perez%' 
OR (concat(name, " ", lastname) LIKE '%Marcos Raul Perez%') 
)) 

我會很感激的幫助不工作。

回答

2

我強烈建議使用elasticsearch與輪胎寶石或類似的東西,而不是SQL。看起來你的搜索要求很複雜。在SQL中進行搜索時遇到的問題是底層應用程序體系結構中缺少功能的跡象。

+0

Luri我已經安裝了這種寶石,但不知道如何將它集成在我的項目?你可以幫我嗎? –

+0

http://railscasts.com/episodes/306-elasticsearch-part-1 ......... 但是不完整,我正在使用rails 2.3 –

+0

你有另一種簡單的方法嗎?使用代碼? –

0

您可以使用思維斯芬克斯是一個很好的創業板導軌搜索