Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Полнотекстовый поиск
Форумы портала PHP.SU » PHP » Программирование на PHP » Полнотекстовый поиск

Страниц (2): [1] 2 »
 

1. Артком - 12 Августа, 2010 - 14:54:29 - перейти к сообщению
есть две таблицы, имеющие одинаковую структуру и разное название. по одной таблицуе поиск работает по другой нет (выводит 0 строк). в чем проблема немогу понять.
2. duk - 12 Августа, 2010 - 16:49:32 - перейти к сообщению
можно глянуть на свойства таблицы - способ сравнения
3. Артком - 12 Августа, 2010 - 18:51:19 - перейти к сообщению
таблицы идентичные.
4. alexspb - 12 Августа, 2010 - 19:25:33 - перейти к сообщению
Артком пишет:
таблицы идентичные.

но предлагаете нам гадать на кофейной гуще...
давайте скл обоих таблиц и запросы
5. Артком - 12 Августа, 2010 - 22:58:39 - перейти к сообщению
alexspb пишет:
давайте скл обоих таблиц и запросы


CODE (htmlphp):
скопировать код в буфер обмена
  1. -- phpMyAdmin SQL Dump
  2. -- version 3.3.2deb1
  3. -- http://www.phpmyadmin.net
  4. --
  5. -- Хост: localhost
  6. -- Время создания: Авг 11 2010 г., 22:54
  7. -- Версия сервера: 5.1.41
  8. -- Версия PHP: 5.3.2-1ubuntu4.2
  9.  
  10. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  11.  
  12.  
  13. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  14. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  15. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  16. /*!40101 SET NAMES utf8 */;
  17.  
  18. --
  19. -- База данных: `fer`
  20. --
  21.  
  22. -- --------------------------------------------------------
  23.  
  24. --
  25. -- Структура таблицы `pizdec`
  26. --
  27.  
  28. CREATE TABLE IF NOT EXISTS `pizdec` (
  29.   `N` int(11) NOT NULL DEFAULT '0',
  30.   `proizvoditel` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  31.   `model` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  32.   `sv` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  33.   `svv` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  34.   `svvv` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  35.   `gg` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  36.   `opisanie` varchar(5000) COLLATE utf8_unicode_ci DEFAULT NULL,
  37.   `ostatok` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  38.   `cena` float(9,2) DEFAULT NULL,
  39.   PRIMARY KEY (`N`),
  40.   FULLTEXT KEY `opisanie` (`opisanie`)
  41. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  42.  
  43. --
  44. -- Дамп данных таблицы `pizdec`
  45. --
  46.  
  47. INSERT INTO `pizdec` (`N`, `proizvoditel`, `model`, `sv`, `svv`, `svvv`, `gg`, `opisanie`, `ostatok`, `cena`) VALUES
  48. (1, 'uuuuu', '777', '8888', '99', '0', '-==', 'bnvnmnghncg j fxgh fgxhxgf ', '6', 8.00),
  49. (2, 'uuuuu', 'vb cv', 'cvxb', 'xcvb', 'xcbx', 'vc b', 'bnvnmnghncg j fxgh fgxhxgf yyyy', '7', 5.00),
  50. (3, 'bcxb', 'xcv', 'xcv', 'vxc', 'zv', 'zvcz', '', '9', 0.00);

CODE (htmlphp):
скопировать код в буфер обмена
  1. -- phpMyAdmin SQL Dump
  2. -- version 3.3.2deb1
  3. -- http://www.phpmyadmin.net
  4. --
  5. -- Хост: localhost
  6. -- Время создания: Авг 11 2010 г., 22:55
  7. -- Версия сервера: 5.1.41
  8. -- Версия PHP: 5.3.2-1ubuntu4.2
  9.  
  10. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
  11.  
  12.  
  13. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  14. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  15. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  16. /*!40101 SET NAMES utf8 */;
  17.  
  18. --
  19. -- База данных: `fer`
  20. --
  21.  
  22. -- --------------------------------------------------------
  23.  
  24. --
  25. -- Структура таблицы `pizdeck`
  26. --
  27.  
  28. CREATE TABLE IF NOT EXISTS `pizdeck` (
  29.   `N` int(11) NOT NULL DEFAULT '0',
  30.   `proizvoditel` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  31.   `model` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  32.   `sv` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  33.   `svv` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  34.   `svvv` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  35.   `gg` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  36.   `opisanie` mediumtext COLLATE utf8_unicode_ci,
  37.   `ostatok` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  38.   `cena` float(9,2) DEFAULT NULL,
  39.   PRIMARY KEY (`N`),
  40.   FULLTEXT KEY `opisanie` (`opisanie`)
  41. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  42.  
  43. --
  44. -- Дамп данных таблицы `pizdeck`
  45. --
  46.  
  47. INSERT INTO `pizdeck` (`N`, `proizvoditel`, `model`, `sv`, `svv`, `svvv`, `gg`, `opisanie`, `ostatok`, `cena`) VALUES
  48. (1, 'uuuuu', '777', '8888', '99', '0', '-==', '-9nnvbnxxcv gfxh gfhsfg h/ gfh/fgxh /sgfh /gfxh /xgfh /xfh xf/h x/', '6', 8.00),
  49. (2, 'uuuuu', 'vb cv', 'cvxb', 'xcvb', 'xcbx', 'vc b', 'poisk ras', '7', 5.00),
  50. (3, 'bcxb', 'xcv', 'xcv', 'vxc', 'zv', 'zvcz', 'bnvnmnghncg j fxgh fgxhxgf  12345', '9', 0.00);

SELECT * FROM `pizdeck` WHERE MATCH (opisanie) AGAINST ('fgxhxgf') - выводит ответ 1 строку
SELECT * FROM `pizdec` WHERE MATCH (opisanie) AGAINST ('fgxhxgf') - выводит ответ 0 строк
6. dsb80 - 13 Августа, 2010 - 00:31:42 - перейти к сообщению
Практически не глядя могу сказать, что для работы полнотекстного поиска необходимо заполнить таблицы минимум как на 10 СТРОК!
7. JustUserR - 13 Августа, 2010 - 01:59:21 - перейти к сообщению
Артком Различные результаты поиска по аналогичным данным могут возникать в том случае - когда кодировка соединений или строковых констант запрашиваемых данных - не совпадает с внутренним ее представлением или collation-значением в БД для данной таблицы или конкретной строки
8. Артком - 14 Августа, 2010 - 22:25:31 - перейти к сообщению
меняем запрос поиска на SELECT * FROM `pizdec` WHERE MATCH (opisanie) AGAINST ('fgxhxgf' IN BOOLEAN MODE) и все работает. как обьяснить это?
кодировка одинаковая
9. JustUserR - 15 Августа, 2010 - 01:47:32 - перейти к сообщению
Uchkuma пишет:
А я думал, DW адоб купил.
Да действительно корпорация Abode купила компанию Macromedia - и использует ее продукты со своей торговой маркой начиная с версии пакета CS3
10. Viper - 16 Августа, 2010 - 08:21:21 - перейти к сообщению
Артком уважаемый а где вы видели чтобы поле VARCHAR было больше 256 символов?
это что за бред "`opisanie` varchar(5000)" ?

Артком пишет:
меняем запрос поиска на SELECT * FROM `pizdec` WHERE MATCH (opisanie) AGAINST ('fgxhxgf' IN BOOLEAN MODE) и все работает. как обьяснить это?
кодировка одинаковая

вопрос в том - как работает? вы получаете релевантный результат илил просто набор результатов? если второе то LIKE будет быстрее.
К тому же IN BOOLEAN MODE подразумевает обязательное использование операторов.
Обратитесь к мануалу http://dev[dot]mysql[dot]com/doc/refman/[dot][dot][dot]ext-boolean[dot]html иначе ваш "полнотекстовый" поиск лишен смысла.
11. Артком - 16 Августа, 2010 - 15:49:32 - перейти к сообщению
Viper, собственно вопрос поставлен для того чтоб понять что не так, а не чтобы получить ссылку на мануал по MYSQL

"это что за бред "`opisanie` varchar(5000)" ?"

По Вашему,чтото изменится, если исправить на 256? ничего. значит, проблема не в этом.
кроме того, оператор LIKE работает несколько иначе, зачем разбивать запрос поиска на части посредствами PHP и делать запрос через LIKE если MYSQL сделает это само ?

Вопрос все еще актуален.
12. Viper - 16 Августа, 2010 - 16:23:43 - перейти к сообщению
Артком Если бы потрудились прочитать мануал, то вопроса бы не возникло.
Что ж повторю ещё раз - для BOOLEAN MODE необходимо использовать операторы!

Артком пишет:
По Вашему,чтото изменится, если исправить на 256? ничего. значит, проблема не в этом.

действительно чего уж тут... давайте тогда уж индексы в blob пихать...

Я не предлагал разбивать результаты для LIKE на php.
13. Champion - 16 Августа, 2010 - 19:58:09 - перейти к сообщению
Начинаю читать по чуть-чуть
1 - Viper, давно прошли те времена, когда varchar был 256. Сейчас он может быть 64к, если не больше. Где-то, может быть, и 2Г
(Добавление)
2 - По вопросу. Что выведут запросы
SELECT p.*, MATCH (opisanie) AGAINST ('fgxhxgf') as relevance FROM `tbl` p ?
(Добавление)
3 - То, что работает in boolean mode можно объяснить штукой, которая называется 50% threshold. Правда, не очень пойму как она может здесь проявиться
14. JustUserR - 17 Августа, 2010 - 02:46:48 - перейти к сообщению
Артком пишет:
Таблицы идентичные
Для диагностики можете попробовать оставить таблицу по которой полнотекстовый поиск проходит успешно и удалить вторую - а потом выполить полное копирование первой таблицы со всей находящейся в ней информацией и настройками - можно также использовать вход от привелегированного пользователя и скопировать полную струкруту из служебной таблицы information_chema - а также попробовать выполнить операцию восстанеовления REPAIR для вашей таблицы
15. Viper - 17 Августа, 2010 - 07:50:55 - перейти к сообщению
Champion пишет:
давно прошли те времена, когда varchar был 256. Сейчас он может быть 64к, если не больше. Где-то, может быть, и 2Г


вопрос в том что оптимальнее, будет быстрее работать и займет меньше места. тем более ни в одной документации к mysql я не встречал чтобы это поле было больше 255.

по теме... к примеру

CODE (SQL):
скопировать код в буфер обмена
  1. ... WHERE MATCH (FIELDS) AGAINST ('* ~fgxhxgf' IN BOOLEAN MODE) ...

 

Powered by ExBB FM 1.0 RC1