【发布时间】:2015-03-09 16:17:50
【问题描述】:
我在一家电子商务公司工作,我们最近推出了一个新网站。我负责创建搜索算法。
我们使用的是 SQL Server 数据库。我们使用“标签”将产品与某些产品关键字相关联。我不想使用我们的任何实际信息,所以我将用其他名称替换实际的数据。
有一个Product 表、一个Tags 表和一个将产品与标签相关联的ProductTags 表。 Tag 可以有很多产品,反之亦然。
Tag 表有:
int TagId
varchar TagName
Product 表有:
Name
ProductId
Price
ProductTags 有:
TagId
ProductId
TagName
ProductName
现在我正在对查询中的空格拆分一个搜索查询,并查找适用于每个字符串的所有“标签”。
示例查询如下所示:“Red fish M60”。
拆分查询中的空格后,我从查询中的每个字符串中获取标签列表。 以下都是'Tag's。
Red 返回的字符串:
[Red]
鱼会回来:
[Fish_Male]
[Fish_Female]
[Fish_North_America]
和 M60 返回:
[M60_connection]
[M60_secure]
该搜索的热门搜索可能是一些名称如下的产品
'Red Male Fish Secure'
'Red Female Fish Secure'
'Red Male fish North america connection'
然后在那些下面会是不太相关的产品,例如
'red male fish farmed'
'black female fish secure'
然后在下面将是只匹配一个标签的不太相关的结果,例如
'red crab'
或
'black male fish'
希望对你有帮助。
所以我的问题是,什么是最好的方式(最快、最有效?)让我浏览这些标签并在顶部返回最相关的产品,同时又不会遗漏任何产品。
我是否可以对这些标签进行所有可能的排列并返回每个排列的产品? (似乎很多)以及为每个人标签返回产品,就像在最后一样。
例如,匹配三个“标签”的产品将位于搜索结果的顶部,而仅匹配一个“标签”的产品将位于底部。用户将能够搜索任意 n 个标签,因为有很多可用的标签。我放下的只是一个简单的例子。如果有什么不明白的地方请告诉我。
谢谢
【问题讨论】:
-
您使用的是哪个 RDBMS?
-
产品的相关性如何确定?
-
我们正在使用 SQL Server。我不确定你的意思丹。
-
您的问题表明您希望最相关的产品位于顶部。因此我的问题。
-
哦,我明白了。最相关的产品将是标签点击次数最多的产品。我编辑了我的原件,希望它现在更清晰一些。
标签: sql sql-server algorithm permutation