Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление 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
Цитата(g27 @  13.3.2010,  20:42 Найти цитируемый пост)
да и важна уникальность, однокоренные не подходят

во внешних индексаторах(тот же sphinx) нормализация - настраиваема. если не надо - просто отключаешь.
в fulltext search, кажется, ничего похожего нет. 
так что ненужный функционал мешаться под ногами не будет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)