Эффективная реализация граненого поиска в реляционных базах данных

Я пытаюсь реализоватьФасетный поиск или пометки с фильтрацией нескольких тегов. В фасетной навигации отображаются только непустые категории, а количество элементов в категории, которые также соответствуют уже примененным критериям, представлено в скобках.

Я могу получить все предметы с назначенными категориями, используя INNER JOIN а такжеполучить количество товаров во всех категориях, используя COUNT и GROUP BY, Однако я'Я не уверен, как он будет масштабироваться до миллионов объектов и тысяч тегов. Особенно подсчет.

Я знаю, что есть некоторые нереляционные решения, такие какLucene + SOLR, но я'мы также нашли некоторые реализации на основе СУБД с закрытыми исходными кодами, которые, как говорят, обладают высокой производительностьюFacetMap.com или жеEndeca программное обеспечение, поэтому должен быть эффективный способ выполнения фасетного поиска в реляционных базах данных.

У кого-нибудь есть опыт в многогранном поиске и могли бы дать несколько советов?

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

Редактировать:

Пример многогранной навигации можно найти здесь:Фламенко.

В настоящее время у меня есть стандартная схема с тремя таблицами (items, tags и items_tags, как описано здесь:http://www.pui.ch/phred/archives/2005/04/tags-database-schemas.html#toxi ) плюс стол для граней. Каждый тег имеет свой фасет.

Ответы на вопрос(4)

Ваш ответ на вопрос