Ruby On Rails in UA/Разработка на ROR/Поиск, игнорирующий разделители

06 февраля 2010, 17:06
petRUShka
petRUShka
Живет: Moscow,RUS
Сообщений: 27
Рейтинг: 0.0
Рег: 26 сент. 2008

Поиск, игнорирующий разделители
  •  
Есть задача в базе есть всякие записи типа "ВБ321", "ВБ.3.2.а-12". Надо уметь искать так, чтобы поиск игнорировал точки, запятые, пробельные символы и работал без учёта регистра. Я сделал это так. Я выгружаю все объекты, среди которых идёт поиск. Потом удаляю все лишние символы из поискового запроса, а далее перебираю каждый элемент так: удаляю из title и sign все лишние символы и сравниваю с почищенной поисковой строкой.
reg = Regexp.new("[-!
reg = Regexp.new("[-!\"#\$\%&'()*+,./:;<=>?@\[\\\]^_`{|}~\s]+")
escaped_search =  params[:search].gsub(reg,"").downcase
@items = Item.all.find_all{|i| i.title.gsub(reg,"").downcase[escaped_search] || i.sign.gsub(reg,"").downcase[escaped_search]}
quot;#\$\%&'()*+,./:;<=>?@\[\\]^_`{|}~\s]+")
escaped_search =  params[:search].gsub(reg,"").downcase
@items = Item.all.find_all{|i| i.title.gsub(reg,"").downcase[escaped_search] || i.sign.gsub(reg,"").downcase[escaped_search]}
Но мне кажется это не очень оптимально. У меня есть ощущение, что гораздо разумнее использовать для этих дел SQL. Вопрос только как это сделать?
, ,
06 февраля 2010, 17:08
petRUShka
petRUShka
Живет: Moscow,RUS
Сообщений: 27
Рейтинг: 0.0
Рег: 26 сент. 2008

RE: Поиск, игнорирующий разделители
  •  
petRUShka Глючит подсветка ruby-кода. Реальный ruby-код там такой:
reg = Regexp.new("[-!reg = Regexp.new("[-!\"#\$\%&'()*+,./:;<=>?@\[\\\]^_`{|}~\s]+")
escaped_search =  params[:search].gsub(reg,"").downcase
@items = Item.all.find_all{|i| i.title.gsub(reg,"").downcase[escaped_search] || i.sign.gsub(reg,"").downcase[escaped_search]}quot;#\$\%&'()*+,./:;<=>?@\[\\]^_`{|}~\s]+")
escaped_search =  params[:search].gsub(reg,"").downcase
@items = Item.all.find_all{|i| i.title.gsub(reg,"").downcase[escaped_search] || i.sign.gsub(reg,"").downcase[escaped_search]}
07 февраля 2010, 10:53
demoversion
Ігор Касянчук
Живет: Ivano-Frankivsk,UKR
Сообщений: 228
Рейтинг: 55.0
Рег: 05 сент. 2007

RE: Поиск, игнорирующий разделители
  •  
petRUShka сделай кешируемую колоноку со значением без точек и других знаков, и обновляй ее автоматом при сохранении объекта и поиск делай по ней
07 февраля 2010, 23:47
petRUShka
petRUShka
Живет: Moscow,RUS
Сообщений: 27
Рейтинг: 0.0
Рег: 26 сент. 2008

RE: RE: Поиск, игнорирующий разделители
  •  
Ігор Касянчук Как вариант, спасибо. А есть какой-нибудь MySQL-подход a la LIKE без лишних столбцов?
08 февраля 2010, 23:51
DimaS
Dmitry Solonina
Живет: Nikolaev,UKR
Сообщений: 129
Рейтинг: 25.0
Рег: 17 апр. 2007

RE: Поиск, игнорирующий разделители
  •  
petRUShka есть regexp и rlike
------------
IDE я нахожуся?
08 февраля 2010, 23:57
petRUShka
petRUShka
Живет: Moscow,RUS
Сообщений: 27
Рейтинг: 0.0
Рег: 26 сент. 2008

RE: RE: Поиск, игнорирующий разделители
  •  
Dmitry Solonina Спасибо!

Гости: 119 Онлайн: 0