2013-10-04 3 views
0

Я создал поисковое приложение, используя 2 столбца (имя и фамилия), но не работает, когда у человека более двух имен. Как я могу найти человека с тремя именами и фамилиями?Проблема с множественным текстовым поиском

Контроллер:

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

Works, если я искать Рауль Перес

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

Я очень ценю помощь.

ответ

2

Я настоятельно рекомендую использовать elasticsearch с шинами или чем-то похожим вместо SQL. Похоже, ваши требования к поиску сложны. Проблема, которую вы испытываете при поиске в SQL, является признаком отсутствия возможностей в базовой архитектуре приложения.

+0

Лурьте я уже установлен этот драгоценный камень, но не знают, как интегрировать его в моем проекте? можешь мне помочь? –

+0

http: //railscasts.com/episodes/306-elasticsearch-part-1 ......... Но не является полным, и я использую рельсы. 2.3 –

+0

Есть ли у вас еще один простой способ? используя код? –

0

Вы можете использовать мышление сфинкса хороший камень для рельсов поиска

Смежные вопросы