0

2 つの列 (名前と姓) を使用して検索アプリケーションを作成しましたが、1 人に 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%' )  
 )) 

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%' )  
 )) 

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%' )  
 )) 

Ignacio 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%' )  
 )) 

本当に助かります。

4

2 に答える 2

2

SQL の代わりに、tire gem などで Elasticsearch を使用することを強くお勧めします。検索条件が複雑なようです。SQL での検索で発生している問題は、基盤となるアプリケーション アーキテクチャに機能がないことを示しています。

于 2013-10-04T16:26:47.363 に答える