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

06 февраля 2010, 19:06   Поиск, игнорирующий разделители
petRUShka
petRUShka
Живет: Moscow,RUS
Сообщений: 38
Рейтинг: 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, 19:08   RE: Поиск, игнорирующий разделители
petRUShka
petRUShka
Живет: Moscow,RUS
Сообщений: 38
Рейтинг: 0.0
Рег: 26 сент. 2008

  •  
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, 12:53   RE: Поиск, игнорирующий разделители
demoversion
Ігор Касянчук
Живет: Ivano-Frankivsk,UKR
Сообщений: 335
Рейтинг: 125.0
Рег: 05 сент. 2007

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

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

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

  •  
Dmitry Solonina Спасибо!