首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多文本搜索问题

多文本搜索问题
EN

Stack Overflow用户
提问于 2013-10-04 16:08:08
回答 2查看 60关注 0票数 0

我使用两个列(名称和姓氏)创建了一个搜索应用程序,但是当一个人有两个以上的名字时就不能工作了。我如何搜索一个有三个名字和姓氏的人?

主计长:

代码语言:javascript
复制
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

视图

代码语言:javascript
复制
 <% form_tag :controller=>"person",:action=>"search" do %>
    Nombre o Apellido
    <%= text_field_tag "query",  params[:query]
 <% end %>

示例

代码语言:javascript
复制
 |name|                |Lastname|
 Marcos Ignacio Raul    Perez

我在日志上看到:如果我搜索马科斯·伊格纳西奥·劳尔·佩雷斯,那是可行的。

代码语言:javascript
复制
 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%' )  
 )) 

如果我搜索伊格纳西奥·劳尔·佩雷斯

代码语言:javascript
复制
 SELECT * FROM `people`
 WHERE ((
 name LIKE '%Ignacio Raul Perez%' OR 
 lastname LIKE '%Ignacio Raul Perez%'  
 OR (concat(name, " ", lastname) LIKE 'Ignacio Raul Perez%' )  
 )) 

如果我搜索劳尔·佩雷斯

代码语言:javascript
复制
 SELECT * FROM `people`
 WHERE ((
 name LIKE '%Raul Perez%' OR 
 lastname LIKE '%Raul Perez%'  
 OR (concat(name, " ", lastname) LIKE 'Perez%' )  
 ))   

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

代码语言:javascript
复制
 SELECT * FROM `people`
 WHERE ((
 name LIKE '%Marcos Perez%' OR 
 lastname LIKE '%Marcos Perez%'  
 OR (concat(name, " ", lastname) LIKE '%Marcos Perez%' )  
 )) 

如果我搜索伊格纳西奥·佩雷斯

代码语言:javascript
复制
 SELECT * FROM `people`
 WHERE ((
 name LIKE '%Ignacio Perez%' OR 
 lastname LIKE '%Marcos Perez%'  
 OR (concat(name, " ", lastname) LIKE '%Ignacio Perez%' )  
 ))

如果我搜查马科斯·劳尔·佩雷斯

代码语言:javascript
复制
 SELECT * FROM `people`
 WHERE ((
 name LIKE '%Marcos Raul Perez%' OR 
 lastname LIKE '%Marcos Raul Perez%'  
 OR (concat(name, " ", lastname) LIKE '%Marcos Raul Perez%' )  
 )) 

我真的很感激你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-04 16:26:47

我强烈建议使用elasticsearch与轮胎,宝石或类似的东西,而不是SQL。看起来你的搜索要求很复杂。SQL中的搜索出现了问题,这表明底层应用程序体系结构中缺少功能。

票数 2
EN

Stack Overflow用户

发布于 2013-10-22 21:56:54

您可以使用sphinx是rails搜索的好宝石。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19185881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档