Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建一个";您可能感兴趣的产品;SQL中的算法?_Sql_Algorithm_Search_Product_Similarity - Fatal编程技术网

创建一个";您可能感兴趣的产品;SQL中的算法?

创建一个";您可能感兴趣的产品;SQL中的算法?,sql,algorithm,search,product,similarity,Sql,Algorithm,Search,Product,Similarity,我有一个问题,我不知道如何解决 我有一个简单的数据库,存储产品、用户和用户购买的产品。 每种产品都有名称、类别和价格 我的目标如下: 我想向用户显示一个由5个项目组成的列表,建议用户“您可能感兴趣”。主要问题是,我不想只搜索%..%的名称,我还想考虑用户通常购买的产品类型,他通常购买的价格范围,优先考虑购买频率更高的产品 这样的算法现实吗?我可以想到一些指标,比如将所有类别分组到语义上“相似”的桶中,并计算距离,但我不确定当存在多个标准时应该如何对它们进行排序 也许我应该为每个标准指定一个重要系

我有一个问题,我不知道如何解决

我有一个简单的数据库,存储产品、用户和用户购买的产品。 每种产品都有名称、类别和价格

我的目标如下: 我想向用户显示一个由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这是一个典型的数据科学类型的问题。