vshemarov
@vshemarov

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

Есть база хранения сущностей (документов, изображение - не суть), у каждой сущности есть некий набор тегов. Например,
doc1 - tag1
doc2 - tag2
doc3 - tag3, tag4
doc4 - tag1, tag2, tag3

Ожидается, что сущностей будет несколько миллионов, уникальных тегов - предположительно, несколько сотен (возможно, тысячи).

Нужно организовать хранение и поиск по тегам так с учетом следующих условий:
- выдавать в результатах поиска, если совпал хотя бы 1 тег
- чем больше тегов совпало, тем выше в результатах поиска должна быть сущность
- нужна разбивка результата на страницы

Например, если задан поиск "tag1 tag3 tag5", то результат должен быть
doc4
doc1
doc3

Разумеется, первое, что напрашивается - это организация хранения many-to-many с промежуточной таблицей. Но не соображу, как с минимальными затратами получить нужный результат. Возможно, стоит посмотреть в сторону Sphinx или Elasticsearch, но не очень хочется поднимать дополнительный софт.

Может, будут у кого какие-то идеи, советы?
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

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