【问题标题】:Pattern for searching entire DB record, not specific field搜索整个数据库记录的模式,而不是特定字段
【发布时间】:2011-04-09 09:29:43
【问题描述】:

我看到越来越多的搜索不仅在特定列中找到子字符串,而且似乎在所有列中进行搜索。一个例子是在亚马逊,你可以搜索“阿诺德”,它会找到由阿诺德施瓦辛格主演的电影 Running Man 和 Gund 玩具 Arnold the Snoring Pig。我不知道这种搜索的术语是什么(广泛搜索?全局搜索?),这让我很烦恼。但我真正想知道的是QUICK方式完成此类搜索的正常模式是什么。

显而易见且缓慢的方法是在标题中搜索子字符串“Arnold”、在作者中搜索“Arnold”、在描述中搜索“Arnold”等。

想到的第一个快速解决方案是将用于描述产品的每个单词存储到产品本身的映射,然后搜索该单词映射。这可能很快,但对我来说似乎不是很节省空间。

可能有一百种方法可以做到这一点,其中一些可能甚至不使用数据库。但规范是什么?

【问题讨论】:

    标签: sql database database-design search full-text-search


    【解决方案1】:

    过去我通过将 XML 版本的项目存储在表中的 XML 列中,然后在该列而不是其他列中搜索来完成此操作。

    【讨论】:

    • 这是一个想法。在搜索 LIKE '%Arnold%' 时,您会在该列上使用哪种索引来避免全索引扫描?
    • 一般来说,我会在该表上启用全文,然后将该列添加到全文索引并以这种方式进行搜索。
    • +1:我喜欢这个主意。所以“全文搜索”是这个词的恰当术语,或者在甲骨文世界中的“甲骨文文本”。
    【解决方案2】:

    也许他们没有按照您期望的方式存储数据。

    例如,他们可以将所有标题、作者、描述和所有其他可搜索字段存储在一个表中,并使用一个属性来区分字段的类型。

    【讨论】:

    • 这在我看来是最有可能的,类似于问题中的“想到的第一个快速解决方案”。你能说一些主要的实现是这样完成的吗?如果是这样,请给我们指出一个。
    猜你喜欢
    • 2021-09-12
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多