【问题标题】:Building autosuggest构建自动建议
【发布时间】:2010-11-11 14:35:17
【问题描述】:

我正在构建一个自动建议。目前目标应用程序是桌面应用程序,但我们的想法是尽可能强大地构建它,然后可能将其包含在网络中。

现在我正处于项目的最开始:思考数据库(SQL Server 2008)

自动建议将来自约 40.000.000 行的表。

现在我的选择是:全文搜索或建立一个我现在要描述的表格:

我的自动建议项目:

a b c
1 2 3
x y z

结果表:

a b c              a b c
a b c              a c b
a b c              b a c
a b c              b c a
a b c              c a b
a b c              c b a

对于每个项目也是如此。

现在我的问题:

当我希望最大限度地减少对自动建议列表的项目搜索时,其中哪一个是最好的?还有其他更好的吗?

谢谢!

迭戈

【问题讨论】:

    标签: .net sql sql-server sql-server-2008 autocomplete


    【解决方案1】:

    我认为FULLTEXT 会更好,即使您只需要完全匹配。

    但是,即使您决定不使用FULLTEXT,为什么还需要索引所有排列?您可以按字母顺序索引它们一次(a, b, c),然后在将它们作为参数提供给查询之前以相同的顺序重新排列项目。

    也就是说,即使您的查询是 O, C, D,您也应该始终搜索 C, D, O

    【讨论】:

    • 我正在索引所有排列,因为我不会寻找完全匹配的内容,并且我想减少每次搜索时所有可能的查询时间。因此,当用户开始提示任何单词时,我可以创建一个 LIKE 'word%' ,仅此而已。
    • @Diego:在这种情况下,您绝对应该使用FULLTEXT 索引
    • @Diego:即使您决定使用B-Tree 索引,也不需要索引所有排列。在您的情况下,索引'a, b, c''b, a''c, b',这只是3 记录,而不是6。见这篇文章:explainextended.com/2009/05/09/creating-indexes
    【解决方案2】:

    所以...您想根据部分输入查询包含 4000 万条记录的表,匹配列的任何部分(甚至多个列),可能同时来自许多用户...我假设您是期望亚秒级的响应时间。

    您的数据库服务器最好是真正的野兽。

    我强烈建议您重新考虑您的计划或至少限制用户的选择,例如将搜索限制在列的开头等。
    但是,如果您决定继续这样做,那么全文是不可能的,除非您在应用程序中包含某种有趣的等待光标以在自动建议查询运行时娱乐用户。

    【讨论】:

    • 是的,我期待亚秒级的响应时间。但是我保存的所有排列都是为了避免你所说的:“匹配列的任何部分(甚至多列)”。不,只有一列,就在开头(因为排列)。
    猜你喜欢
    • 2011-09-06
    • 1970-01-01
    • 2011-08-24
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    相关资源
    最近更新 更多