У нас в конторе труд "вбивальщиков" полуавтоматизирован. Программно ищутся наилучшие соответствия записей в базе строкам прайслистов. Это дело выдается "вбивальщику", чтобы он руками исправил всякие конфузы и указал, что делать с позициями, не найденными в базе. Потом все это оптом сохраняется.
Не могу сказать, что эта система работает идеально. "Вбивальщики" сидят на выработке (сумма количеств позиций обработанных прайсов) и мусор лезет в базу тоннами. Причем, если с жестянщиками еще можно как-то ладить, то с аптекарями - проще убить себя ап стену
-~{}~ 20.03.08 04:23:
Вобщем, с фултекстом все оказалось не просто. Создал таблицу
[sql]CREATE TABLE test_goods (
id int(11) NOT NULL auto_increment,
name varchar(255) NOT NULL,
normalize text NOT NULL,
PRIMARY KEY (id),
FULLTEXT KEY normalize (normalize)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;[/sql]
Пихнул в нее ок. 40 тыс. наименований товаров из реальной базы. Запросы
[sql]SELECT name, normalize, MATCH(normalize) AGAINST('$search') AS rank
FROM test_goods
WHERE MATCH(normalize) AGAINST('$search') > 10
ORDER BY rank DESC
LIMIT 30[/sql]
Выполняются порядка 0,001-0,01 сек. Это на девелоперской машине 3GHz, память 1GB, Linux 2.6.23.15, MySQL 5.0.45.
Теперь про качество результатов:
Если не пользовать условие
[sql]MATCH(normalize) AGAINST('$search') > 10[/sql]
то в результат попадает куча мусора.
Так, например, на запрос "
фартук", помимо собственно фартуков выдается еще и
Штукатурка CRAUZIT SF-04
Мыло хозяйственное 60%(тыс. штук)
Фармадекс 0,1%р-р 10мл
и т.п.
Однако с указанным условием мусор не встречается; на просьбу фартуков, выдаются только фартуки
А на запрос "
Sony DVD" получил следующие записи:
Видеокамера SONY DVD305
DVD-RW SONY DL box
Цифровая видеокамера SONY DVD505
Диск DVD-RW Sony
Диск DVD-R Sony
DVD±RW Sony 16x Box
DVD±RW Sony DRU-810A DL Box
DVD±RW Sony DW-Q120A DL OEM
DVD±RW Sony DRU-820A 16x DL Box
Диск DVD-R Sony LG 4.7GB 10шт
DVD±RW Sony DRU-830AK 16x DL/RAM Box
DVD±RW Sony DW-Q30A DL Silver OEM
DVD±RW Sony DWG-120A DL Silver OEM
Проигрыватель Sony MPEG4-558 DVD Retail
DVD+RW+DL SONY DRU-840AK Black 20-/20+R/8DL-/8DL+R/6-/8+RW/16x, RAM/12,48/32/48x
Но на запрос "
Sony" при указанном условии не получил ни одной записи, а
без этого условия - 30 релевантноых записей.
Поскольку не могу себе представить разумный способ выбора ограничения для различных запросов, то идею придется отставить
