| 06 февраля 2010, 17:06 | |
|---|---|
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]} |
|
| mysql, поиск, разделители |
| 06 февраля 2010, 17:08 | |
|---|---|
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 | |
|---|---|
Ігор Касянчук Живет: Ivano-Frankivsk,UKR Сообщений: 228 Рейтинг: 55.0 Рег: 05 сент. 2007 |
RE: Поиск, игнорирующий разделители |
| petRUShka сделай кешируемую колоноку со значением без точек и других знаков, и обновляй ее автоматом при сохранении объекта и поиск делай по ней | |
| 07 февраля 2010, 23:47 | |
|---|---|
petRUShka Живет: Moscow,RUS Сообщений: 27 Рейтинг: 0.0 Рег: 26 сент. 2008 |
RE: RE: Поиск, игнорирующий разделители |
| Ігор Касянчук Как вариант, спасибо. А есть какой-нибудь MySQL-подход a la LIKE без лишних столбцов? | |
| 08 февраля 2010, 23:51 | |
|---|---|
Dmitry Solonina Живет: Nikolaev,UKR Сообщений: 129 Рейтинг: 25.0 Рег: 17 апр. 2007 |
RE: Поиск, игнорирующий разделители |
| petRUShka
есть regexp и rlike ------------ IDE я нахожуся? |
|
| 08 февраля 2010, 23:57 | |
|---|---|
petRUShka Живет: Moscow,RUS Сообщений: 27 Рейтинг: 0.0 Рег: 26 сент. 2008 |
RE: RE: Поиск, игнорирующий разделители |
| Dmitry Solonina Спасибо! | |