JayOrson
@JayOrson

Как лучше организовать полнотекстовый поиск в MySQL?

Есть таблица со списком урлов с типом text (число символов заранее неизвестно):

CREATE TABLE `mytable` (
  `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  `list_of_url` TEXT,
  PRIMARY KEY (`id`),
  FULLTEXT (`list_of_url`)
)  ENGINE = MyISAM

Число строк может быть очень большим (порядка сотни тысяч). Все урлы должны быть уникальными. И поскольку выборка по урлу будет производится очень часто, есть смысл в оптимизации запросов. Поиск будет осуществляться не по части строки, а по полному совпадению.
Нашел, кажется, единственный способ для полнотекстового поиска:

Запрос, типа

SELECT id, MATCH (list_of_url) AGAINST ('/index.php?id=123&edit=1') FROM mytable

возвращает, если правильно понял, значение релевантности.
Есть ли смысл в использовании запроса типа:

SELECT * FROM `mytable` WHERE `list_of_url` LIKE '/index.php?id=123&edit=1'

с использованием индекса fulltext или есть способ организации подобного поиска иным, более элегантным способом?
  • Вопрос задан
  • 824 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Нормализовать таблицу, хранить каждый url в отдельной записи, тогда поиск будет просто по сравнению и максимально быстрым.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
opium
@opium
Просто люблю качественно работать
Зачем полнотекстовый поиск?
Делаете обычный индекс по полю и потом в запросе обычное сравнение url='ваша строка'
Ответ написан
Комментировать
Melkij
@Melkij
PostgreSQL DBA
Обычный b-tree индекс. Нафиг fulltext? И text сомневаюсь что хорошая идея. Попробуйте с varchar'ом.
Хорошо заработает hash-индекс. Правда, mysql их не умеет, придётся эмулировать через дополнительное поле.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы