sql – 在关系数据库中有效地执行分面搜索

我试图通过多标签过滤实现一个 Faceted search标记.在分面导航中,仅显示不为空的类别,并且括号中也显示了与已经应用的条件匹配的类别中的项目数.

I can get all items having assigned categories using INNER JOINsget number of items in all category using COUNT and GROUP BY,但我不知道它将如何扩展到数百万个对象和数千个标签.特别是计数.

我知道有一些不是关系的解决方案,如Lucene + SOLR,但是我发现还有一些基于封闭源的基于RDBMS的实现被认为是像FacetMap.comEndeca这样的企业,所以必须有一个有效的方式来执行在关系数据库中进行多面搜索.

有没有人有分面搜索的经验,可以提供一些提示

缓存每个类别集的计数?也许使用一些智能增量技术来更新计数器?

编辑:

可以在这里找到方面导航的一个例子:Flamenco.

目前,我有标准的3表格方案(项目,标签和items_tags,如这里所述:http://www.pui.ch/phred/archives/2005/04/tags-database-schemas.html#toxi)加上一个表面.每个标签都分配了一个方面.

解决方法

我只能确认尼尔斯说的话. RDBMS不利于多维搜索.我已经使用了一些智能解决方案,缓存计数器,使用触发器等.但最终,外部专用索引器总是胜利.

可能,如果您将数据转换为维度模型并将其提供给某些OLAP [我的意思是MDX引擎] – 它将表现良好.但似乎有点太沉重的解决方案,这绝对不是实时的.

相反,使用专用索引引擎(认为Lucene,认为Sphinx)的解决方案可以靠近实时增加索引更新.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...