Перейти к содержимому

Сервис обмена электронных валют

Партнерская программа Kredov

Неточный поиск в БД

#1 FordogeN

FordogeN
  • Пользователь
  • 1 414 сообщений
  • Репутация: 0
0

Отправлено 11 Июль 2009 - 22:56

Не знаю, может это уже PHP, а не SQL, но задача такова:
Нужно чтоб при запросе "купить слона в москве не дорого" выдавало результаты по фразам "купить слона не дорого" или "не дорогой слон".
Буду очень благодарен за решение выше указанной задачи.

 

 

  • 0

Как настроить выдержку и диафрагму зеркального фотоаппарата



#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 11 Июль 2009 - 23:28

FordogeN, с подстановкой окончаний и заменами это уже нужно писать целую библиотеку слов и их связку. Тут никак. А вот поиск с релевантностью это мы запросто.
В MySQL есть такое понятие "Полнотекстовый поиск".

Он не требует применения шаблонов. Данный режим предоставляет широкие возможности поиска в тексте и выполняется гораздо быстрее поиска с использованием регулярных выражений благодаря специальному индексу FULLTEXT. Следует помнить, что индексация столбца, в том числе и индексом FULLTEXT, требует дополнительного объема памяти для хранения индексов, иногда превышающего объем основных данных в несколько раз, и приводит к замедлению операций вставки и удаления при помощи операторов INSERT и DELETE.

Полнотекстовый поиск в СУБД MySQL на сегодня поддерживается только для таблиц типа MyISAM и столбцов типа CHAR, VARCHAR и TEXT.

Для использования возможностей полнотекстового поиска необходимо проиндексировать текстовыестолбцы таблицы при помощи индекса FULLTEXT
Вот пример создания таблицы с полями для полнотекстового поиска:
CREATE TABLE table (
id INT(11) NOT NULL AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
text TEXT,
PRIMARY KEY (id),
FULLTEXT INDEX search (title, text)

) ENGINE=MyISAM;


Для добавления индекса FULLTEXT в уже существующую таблицу предназначен оператор ALTER TABLE. Индекс FULLTEXT, как и любой другой индекс, создается при помощи спецификации ADD, за которой следует определение индекса.
Пример:
ALTER TABLE table ADD FULLTEXT search (title, text);

Или так:
CREATE FULLTEXT INDEX search ON table (title, text);


------------------------------------------------------------------------------
Полнотекстовый поиск выполняется с помощью констрнукции MATCH ( ... ) AGAINST ( ... ), которая помещается в конструкцию WHERE оператора SELECT.
В круглых скобках после ключевого слова MATCH указываются имена столбцов, по которым производится поиск, а в скобках после AGAINST указывется фраза, которую необходимо найти.
Слова состоящие менее чем из 4 символов отбрасываются, а так же слова встречающиеся как минимум в половине записей.

Остальное читай здесь... Устал переписывать книжку
Полнонекстовый поиск в MySQL
  • 0

#3 FordogeN

FordogeN
    Topic Starter
  • Пользователь
  • 1 414 сообщений
  • Репутация: 0

Отправлено 11 Июль 2009 - 23:51

Спасиб за статью))
  • 0

Как настроить выдержку и диафрагму зеркального фотоаппарата




Оформление форума – IPBSkins.ru