创建一个";您可能感兴趣的产品;SQL中的算法?
我有一个问题,我不知道如何解决 我有一个简单的数据库,存储产品、用户和用户购买的产品。 每种产品都有名称、类别和价格 我的目标如下: 我想向用户显示一个由5个项目组成的列表,建议用户“您可能感兴趣”。主要问题是,我不想只搜索%..%的名称,我还想考虑用户通常购买的产品类型,他通常购买的价格范围,优先考虑购买频率更高的产品 这样的算法现实吗?我可以想到一些指标,比如将所有类别分组到语义上“相似”的桶中,并计算距离,但我不确定当存在多个标准时应该如何对它们进行排序创建一个";您可能感兴趣的产品;SQL中的算法?,sql,algorithm,search,product,similarity,Sql,Algorithm,Search,Product,Similarity,我有一个问题,我不知道如何解决 我有一个简单的数据库,存储产品、用户和用户购买的产品。 每种产品都有名称、类别和价格 我的目标如下: 我想向用户显示一个由5个项目组成的列表,建议用户“您可能感兴趣”。主要问题是,我不想只搜索%..%的名称,我还想考虑用户通常购买的产品类型,他通常购买的价格范围,优先考虑购买频率更高的产品 这样的算法现实吗?我可以想到一些指标,比如将所有类别分组到语义上“相似”的桶中,并计算距离,但我不确定当存在多个标准时应该如何对它们进行排序 也许我应该为每个标准指定一个重要系
也许我应该为每个标准指定一个重要系数,并将结果乘以距离*该系数?您可以为数据库中的每个产品创建两个附加字段。例如,在第一个名为Type的字段中,您可以说“RC”,在第二个名为similor的字段中,您可以说“RC、Radio、Electronics、Remote、Model”,然后在稍后的SQL查询中,您可以告诉它选择与Type和similor匹配的产品。这提供了一个不仅仅依赖产品名称的系统,因为这些名称可能具有欺骗性。它仍将使用LIKE命令,但它将更加准确,因为它是由您预定义的,其他哪些产品与此类似
根据数据库的大小,我认为这是最简单的选择。我在MySql上使用它进行加权搜索:
SELECT *,
IF(
`libelle` LIKE :startSearch, 30,
IF(`libelle` LIKE :fullSearch, 20, 0)
)
+ IF(
`description` LIKE :startSearch, 10,
IF(`description` LIKE :fullSearch, 5, 0)
)
+ IF(
`keyword` LIKE :fullSearch, 1, 0
)
AS `weight`
FROM `t`
WHERE (
-- at least 1 match
`libelle` LIKE :fullSearch
OR `description` LIKE :fullSearch
OR `keyword` LIKE :fullSearch
)
ORDER BY
`weight` DESC
/*
'fullSearch'=>'%'.str_replace(' ', '_', trim($search)).'%',
'startSearch'=>str_replace(' ', '_', trim($search)).'%',
*/
你在使用一个特定的DBMS吗?它实际上是一个Spring data+JPA项目,但这是一个混乱的问题,所以让我们假设它是MySql/MariadB这是一个典型的数据科学类型的问题。