Задавайте вопросы, мы ответим
Вы не зашли.
Подскажите, плиз, как реализовать поиск вида 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"...
как?
Неактивен
WHERE NOT MATCH(...) ?
Неактивен
Ну это как бы простейший случай. На самом деле "СЛОВО" - это поисковый запрос. т.е. в него может придти все что угодно:
+слово1
+слово1 -слово2
...
-слово1
получается, что запрос придется дополнительно анализировать и для случая если от пользователя пришло только "-слово"(а также "-слово1 -слово2 ...") менять запрос. Странно, почему разрабы mysql не предусмотрели такой случай. Я думал, может как то заставить можно
Неактивен
Ну, я подозреваю, что можно сделать какой-то хак злостный, но это будет некрасиво. Типа
"+a* +b* ... -слово1"... но кажется, что это не лучший таки вариант. "Всё, кроме" искать лучше
через NOT MATCHES...
Кроме того, запрос "всё, кроме" гарантированно не будет использовать индекс, поэтому, возможно,
проще будет обойтись RLIKE.
Неактивен
Не... таких хаков нам не надо
А почему индекс гарантировано не будет использоваться? Если например исключающие слова есть в 99% записей, mysql не сообразит, что нужно просмотреть оставшийся 1%?
Неактивен
Слово, попадающее в 99% записей, является по смыслу стоп-словом. Если оно не является таковым,
Вы очень неэффективно используете полнотекстовый индекс.
Неактивен