MegaMufa
@MegaMufa

Как организовать бд для эффективного поиска?

Есть таблица tbl_item, в которой храниться основной контент:
tbl_item
id -> integer primary key
name -> varchar(250) not null


Есть таблица с ключевыми словами, связанная с ней many-to-many:
tbl_tag
id -> integer primary key
name -> varchar(250) not null

rel_item_tag
id -> integer primary key
item_id -> integer not null
tag_id -> integer not null


И таких связанных таблиц несколько. Некоторые связанны one-to-many, другие - many-to-many.

Необходимо организовать поиск записей из таблицы tbl_item по значению полей в связанных таблицах. Т.е. искомая строка может быть автором, разделом, ключевым словом и т.д.

И вот я думаю, как рациональнее это дело организовать. Каждый раз делать сложный запрос - не выход.
Может сделать таблицу со словами для поиска tbl_search и по расписанию заносить в нее все разделы, авторов, ключевые слова и т.д. и связать ее с таблицей tbl_item. И при поиске искать в ней нужное слово и возвращать связанные с ним записи из tbl_item?

Так правильно будет? Или поиск делается как то по другому?
  • Вопрос задан
  • 2478 просмотров
Пригласить эксперта
Ответы на вопрос 2
@zloy531
Самый правильный ответ - Сфинкс (sphinxsearch.com). Полноценный поиск можно сделать только на поисковом движке, на самой базе данных - это всегда для галочки.

А если решать в рамках поставленных условий, то лично я, обычно, создавал View со всеми необходимыми данными. Это, по крайней мере, освободит от "ручного" добавления данных и слежением за консистентностью.
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
При хорошем поиске примерно так и делается, только заносятся не словоформы, а словарные формы слова (лексемы) и места, в которых они встречаются (для поиска отдельно по заголовку, по тексту, по авторам...). Для этого нужна морфологическая база данных русского языка (например по словарю Зализняка). Зачастую также используются словари синонимов и расчёт близости положения слов в тексте.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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