SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 09.12.2008 15:02:39

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Простой вопрос про fulltext

Подскажите, плиз, как реализовать поиск вида AGAINST("-СЛОВО" IN BOOLEAN MODE), чтобы искались все таки _все_ записи, _кроме_ тех, что со словом.

В доке написано явно:

The - operator acts only to exclude rows that are otherwise matched by other search terms. Thus, a boolean-mode search that contains only terms preceded by - returns an empty result. It does not return “all rows except those containing any of the excluded terms.”

а нужно именно "all rows except those containing any of the excluded terms"...
как?

Неактивен

 

#2 09.12.2008 15:12:28

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Простой вопрос про fulltext

WHERE NOT MATCH(...) ?

Неактивен

 

#3 09.12.2008 15:33:33

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Простой вопрос про fulltext

Ну это как бы простейший случай. На самом деле "СЛОВО" - это поисковый запрос. т.е. в него может придти все что угодно:

+слово1
+слово1 -слово2
...
-слово1

получается, что запрос придется дополнительно анализировать и для случая если от пользователя пришло только "-слово"(а также "-слово1 -слово2 ...") менять запрос. Странно, почему разрабы mysql не предусмотрели такой случай. Я думал, может как то заставить можно smile

Неактивен

 

#4 09.12.2008 17:01:38

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Простой вопрос про fulltext

Ну, я подозреваю, что можно сделать какой-то хак злостный, но это будет некрасиво. Типа
"+a* +b* ... -слово1"... но кажется, что это не лучший таки вариант. "Всё, кроме" искать лучше
через NOT MATCHES...

Кроме того, запрос "всё, кроме" гарантированно не будет использовать индекс, поэтому, возможно,
проще будет обойтись RLIKE.

Неактивен

 

#5 10.12.2008 14:29:21

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Простой вопрос про fulltext

Не... таких хаков нам не надо smile

А почему индекс гарантировано не будет использоваться? Если например исключающие слова есть в 99% записей, mysql не сообразит, что нужно просмотреть оставшийся 1%?

Неактивен

 

#6 11.12.2008 19:48:57

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Простой вопрос про fulltext

Слово, попадающее в 99% записей, является по смыслу стоп-словом. Если оно не является таковым,
Вы очень неэффективно используете полнотекстовый индекс.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson