首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关系数据库中分面搜索的高效实现

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

Stack Overflow用户
提问于 2009-12-05 00:01:23
回答 4查看 8.9K关注 0票数 17

我正在尝试实现一个带有多标签过滤的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,但我也发现了一些基于闭源关系型数据库的实现,它们据说是企业级的,比如FacetMap.comEndeca软件,所以必须有一种在关系数据库中执行分面搜索的有效方法。

有没有人有切面搜索的经验,并能给出一些建议?

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

编辑:

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

目前,我有一个标准的3表模式(项目、标签和这里描述的items_tags:http://www.pui.ch/phred/archives/2005/04/tags-database-schemas.html#toxi ),外加一个用于方面的表。每个标记都分配了一个方面。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-12-05 00:46:42

我只能证实尼尔斯说的话。RDBMS不适合多维查询。我使用过一些智能的解决方案,比如缓存计数器、使用触发器等等。但最终,外部专用索引器总是胜出。

也许,如果您将您的数据转换为维度模型,并将其提供给某个OLAP,我是说MDX引擎-它将执行得很好。但它似乎有点太重的解决方案,它肯定不会是实时的。

相反,使用专用索引引擎(想想Lucene,想想Sphinx)的解决方案可以通过增量索引更新来接近实时。

票数 6
EN

Stack Overflow用户

发布于 2009-12-05 00:08:57

在国际海事组织,关系数据库并不擅长搜索。您可以从专用搜索引擎(如Solr/Lucene)获得更好的性能。

票数 5
EN

Stack Overflow用户

发布于 2015-09-04 04:02:17

分面搜索是一个分析问题,这意味着维度设计是一个很好的选择。也就是说,你搜索的东西必须是表格形式的。

在分析表中包括所有感兴趣的列。

将连续值放入存储桶中。

将布尔列用于“许多”项,如类别或标签,例如,如果有三个标签"foo“、"bar”和"baz",则将有三个布尔列。

使用实体化视图创建分析表。

把这些垃圾编入索引。某些数据库支持这种类型的应用程序的索引。

只过滤一次。

合并您的结果。

为常见查询构建预聚合的实体化视图。

这篇文章也可能对你有所帮助:https://blog.jooq.org/2017/04/20/how-to-calculate-multiple-aggregate-functions-in-a-single-query/

代码语言:javascript
复制
with filtered as (
    select
    *
    from cars_analytic
    where
        [some search conditions]
)

--for each facet:

select
    'brand' as facet,
    brand as value,
    count(*) as count
from
    filtered
group by
    brand

union

select
    'cool-tag' as facet,
    'cool-tag'as value,
    count(*) as count
from
    filtered
where
    cool_tag

union

...


-- sort at the end
order by
    facet,
    count desc,
    value

100,000条记录,5个方面,大约150毫秒

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1847909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档