| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Составление SQL-запросов > выбор предложений где есть нужное слово |
| Автор: g27 13.3.2010, 20:35 |
| Здравствуйте, база Mysql Надо выбрать те записи где есть совпадение. То есть есть таблица предложений и надо проверить в каким есть данное слово и их вывести. я Пытался так SELECT * FROM sentences WHERE text_sentence REGEXP '[[:<:]]slovo[[:>:]] | [[:<:]]slovo[[:punct:]]' Но что-то не хочет находить совпадения если с начала строки стоит. Ну вообщем может кто сталкивался и уже знает все нюансы? Спасибо. |
| Автор: Данкинг 13.3.2010, 20:44 |
| Я не работал с Mysql, но разве обычные операторы вроде LIKE там не действуют? |
| Автор: g27 13.3.2010, 20:51 |
| действуют, но там много букв выходит получается Добавлено @ 21:04 '^slovo|[[:<:]]slovo[[:>:]]' пока как-то так.... |
| Автор: skyboy 13.3.2010, 21:09 |
| не надо для этих целей использовать regexp. либо используй полнотекстовый индекс, либо внешний индексатор(рекомендую http://sphinxsearch.com ) при твоем подходе сильно теряешь в скорости. потому что индексы не используются. Добавлено через 49 секунд и ни о какой нормализации слов("мячей" -> "мяч") говорить не приходится, хотя не знаю даже, надо ли тебе это. |
| Автор: g27 13.3.2010, 21:42 |
| не понимаю как мне помогут индексы в данном случае? Мне всёравно придётся пересмотреть все предложения, потом как слово может быть в любом его месте да и важна уникальность, однокоренные не подходят. |
| Автор: skyboy 13.3.2010, 23:53 |
| механизм полнотекстового поиска при создании полнотекстового индексы вычленяет слова. за счет этого, работа с полнотекстовым индексом просто обязана быть намного быстрее, чем regexp/like/locate. Добавлено @ 23:54 во внешних индексаторах(тот же sphinx) нормализация - настраиваема. если не надо - просто отключаешь. в fulltext search, кажется, ничего похожего нет. так что ненужный функционал мешаться под ногами не будет. |