一尘不染

在关系数据库中高效实现分面搜索

sql

我正在尝试使用多标签过滤实现多面搜索或标记。在多面导航中,仅显示非空类别,并且在括号中显示类别中与已应用的标准匹配的项目数。

我可以有使用内部连接分配类的所有项目,并得到使用COUNT和GROUP
BY在所有类别的项目数
,但我不知道怎么会扩展到数百万的标签对象和数千个。尤其是计数。

我知道有一些非关系解决方案,如Lucene +
SOLR
,但我还发现了一些基于RDBMS的开源实现,例如FacetMap.comEndeca软件,它们被称为具有企业实力。在关系数据库中执行多面搜索的有效方法。

是否有人在多面搜索方面有经验并可以提供一些建议?

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

编辑:

可以在此处找到多面导航的示例:Flamenco

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


阅读 118

收藏
2021-03-17

共1个答案

一尘不染

我只能确认尼尔斯在说什么。RDBMS不适用于多维搜索。我使用过一些智能解决方案,缓存计数器,使用触发器等。但是最后,外部专用索引器总是会获胜。

也许吧,如果您将数据转换为维模型并将其提供给某些OLAP [我的意思是MDX引擎]-它会表现良好。但是解决方案似乎有点过于繁琐,而且绝对不是实时的。

相反,可以使用增量索引更新近乎实时地实现具有专用索引引擎的解决方案(例如Lucene,认为Sphinx)。

2021-03-17