当前位置: 首页 > 工具软件 > EasyRec > 使用案例 >

easyrec资料整理

浦修文
2023-12-01

easyrec:一个java库的推荐系统!

一:环境搭建

安装JDK和JRE,分别安装在同一个文件夹(java)下的两个文件夹中(jdk、jre)

系统变量配置:1:新建 系统JAVA_HOME 变量→F:/java/jdk

  2:系统Path 变量→编辑加入→%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

  3:新建系统 CLASSPATH 变量→.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

  4:检验是否配置成功 运行cmd 输入 java -version


安装Tomcat(开源免费的java Web服务器)

  1:下载地址:http://tomcat.apache.org/

  2:环境变量配置:新建系统CATALINA_HOME变量→F:\Tomcat\tomcat

  3:cmd进入安装目录中的bin目录,执行service.bat install(移除为service.bat remove)

  4:双击运行bin目录中的tomcat8w.exe,start开始

  5:浏览器输入localhost:8080,如果能进入Tomcat控制首页就安装成功


进入Tomcat控制首页,进入Manger App(输入用户名和密码)

首次进入需要先进行设置(F:\Tomcat\tomcat\conf\tomcat-users.xml)加入以下代码

<role rolename="manager-gui"/>
<user username="tomcat" password="s3cret" roles="manager-gui"/>

关闭后重启tomcat8w.exe,再次进入后使用相应的用户名和密码登录即可

在Deploy栏目中,直接部署easyrec项目文件(easyrec-web.war从官网下载对应版本后解压即可获得)

部署完成之后,浏览器地址栏输入http://localhost:8080/easyrec-web/进入配置阶段(4步,如果没有第四步)

innodb_flush_log_at_trx_commit=0

innodb_buffer_pool_size=1024M

innodb_log_file_size=250M

innodb_log_buffer_size=16M

在my.ini中的[mysqld]下输入

sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

保存后,重启服务。再次配置(完成后确保能够重定向成功,如果失败,一般是sql_mode中有ONLY_FULL_GROUP_BY,去掉即可)

二:重定向成功之后(以后登录需要进入http://localhost:8080/easyrec-web/,输入用户名和密码登录)

创建新的租户,就可以直接使用创建的租户(一个租户对应一个项目),进行接口调用和后续处理

easyrec的使用一般分为:设置阶段和使用阶段(算法内置,只要使用即可)具体登录后在API下面查看(前一个是API接口调用的维基百科详情,后一个是JS接口调用的详情,一般使用第一个)

设置阶段:即时token的获取、itemtype设置、商品新增、商品间的关系设置等

使用阶段:常用的有其他人也看过、用户历史记录、社区最多查看、针对用户的推荐、用户动作发送等

三:表结构和表字段说明:参考https://wenku.baidu.com/view/7cd8ad0b83c4bb4cf7ecd1aa.html

四:注意!VIEWED_TOGETHER的优先推荐级别是最高的,远高于IS_RELATED,前者关系值10都比后者关系值100要被优先推荐,多关系指向同一个商品时候,推荐级别会被设置为最高,即使他的关系值是平均计算。(具体都由内部算法决定)

五:本人封装的一个常用接口调用的类

class EasyRec{
    protected $apikey="";//API密钥

    protected $tenantid="";//租户ID来识别您的网站

    protected $username="";//后台登录用户名

    protected $password="";//后台登录密码

    protected $serverUrl="http://localhost:8080/easyrec-web";//easyrec项目地址

    //封装curl请求,只需要使用到get请求
    public function easy($url){
        //创建curl
        $ch=curl_init();
        //设置curl
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
        //执行curl
        $output=curl_exec($ch);
        //关闭curl
        curl_close($ch);
        return $output;
    }

    /**
     * [生成即时token]
     * @return [string] [最新的token]
     */
    public function token(){
        //拼接接口url
        $url_token="{$this->serverUrl}/operator/signin?operatorId={$this->username}&password={$this->password}";

        //获取到一个XML结果
        $res= $this->easy($url_token);
        //将XML先转换成json对象,然后转换成数组,取出token
        $res=json_decode(json_encode(simplexml_load_string($res)),true);
        //返回token字符串
        return $res["token"];
    }

    /**
     * [添加itemType:只允许使用大写,不会重复添加]
     * @param [type] $itemtype [商品/文章类型]
     */
    public function addType($itemtype){
        $url_addType="{$this->serverUrl}/api/1.0/additemtype?apikey={$this->apikey}&tenantid={$this->tenantid}&itemtype={$itemtype}";

        $res=$this->easy($url_addType);
        //成功了返回空字符串''
        return $res;
    }

    //删除itemType
    public function deleteType(){
        //删除一个类型会删除所有相关操作、规则等,一般不会选择删除
    }

    /**
     * [导入或者更新文章/商品]
     * @param [type] $itemid          [文章ID]
     * @param [type] $itemdescription [文章描述]  urlencode("测试10"),文章title
     * @param [type] $itemurl         [文章详情页地址]  urlencode("/item/article")
     * @param [type] $itemimageurl    [文章图片地址]  urlencode("/img/covers/hua.jpg")
     * @param [type] $itemtype        [文章类型,默认ITEM]
     */
    public function addItem($itemid,$itemdescription,$itemurl="",$itemimageurl="",$itemtype="ITEM"){
        //增加或者修改文章或者商品的时候需要使用token
        $token=$this->token();
        //拼接接口url
        $url_add="{$this->serverUrl}/api/1.0/importitem?token={$token}&tenantid={$this->tenantid}&itemid={$itemid}&itemdescription={$itemdescription}&itemurl={$itemurl}&itemimageurl={$itemimageurl}&itemtype={$itemtype}";
        //发起请求
        $res=$this->easy($url_add);
        return $res;
    }

    /**
     * [规则导入]
     * @param  [type] $itemfromid   [从商品]
     * @param  [type] $itemtoid     [到商品]
     * @param  [type] $assoctype    [关联类型]一般使用前两种(默认VIEWED_TOGETHER)
     * VIEWED_TOGETHER、IS_RELATED、PROFILE_SIMILARITY、GOOD_RATED_TOGETHER、BOUGHT_TOGETHER
     * @param  [type] $assocvalue   [关联值0.0到100]默认100
     * @param  [type] $itemfromtype [从商品类型] 默认ITEM
     * @param  [type] $itemtotype   [到商品类型] 默认ITEM
     * @return [string]               [description]
     */
    public function rule($itemfromid,$itemtoid,$assoctype="VIEWED_TOGETHER",$assocvalue=100,$itemfromtype="ITEM",$itemtotype="ITEM"){
        //规则导入的时候需要使用token
        $token=$this->token();

        $url_rule="{$this->serverUrl}/api/1.0/importrule?token={$token}&tenantid={$this->tenantid}&itemfromid={$itemfromid}&itemfromtype={$itemfromtype}&itemtoid={$itemtoid}&itemtotype={$itemtotype}&assoctype={$assoctype}&assocvalue={$assocvalue}";

        $res=$this->easy($url_rule);
        return $res;
    }

    /**
     * [发送查看动作]
     * @param  [string] $apikey   [API密钥]
     * @param  [string] $tenantid [租户ID来识别您的网站]
     * @param  [string] $userid [当前用户ID]  "24EH1723322222Z1"
     * @param  [string] $sessionid [用户回话ID]  "F3D4E3BE31EE3FA069F5434DB7EC2E01"
     * @param  [string] $itemid [文章/商品ID]
     * @param  [string] $itemdescription [商品描述]  urlencode 文章表的文章title
     * @param  [string] $itemurl [文章/商品详情页面的链接]  urlencode("/item/article")默认""
     * @param  [string] $itemimageurl [项目的图像]  urlencode("/img/covers/hua.jpg")默认""
     * @return [string]           [用户查看文章的信息]
     */
    public function view($userid,$sessionid,$itemid,$itemdescription,$itemurl="",$itemimageurl=""){
        //拼接接口url
        $url_view="{$this->serverUrl}/api/1.0/view?apikey={$this->apikey}&tenantid={$this->tenantid}&itemid={$itemid}&itemdescription={$itemdescription}&itemurl={$itemurl}&itemimageurl={$itemimageurl}&userid={$userid}&sessionid={$sessionid}";
        //发起请求
        return $this->easy($url_view);

    }

    /**
     * [获取推荐信息(最多返回15条,结果按相关性排序)]
     * @param  [type]  $apikey            [API密钥]
     * @param  [type]  $tenantid          [租户ID来识别您的网站]
     * @param  [type]  $userid            [当前用户ID]  "24EH1723322222Z1"
     * @param  integer $numberOfResults   [记录返回数量,默认返回15条]
     * @param  string  $requesteditemtype [推荐获得商品或文章类型,默认ITEM]
     * @return [json]                     [获取到的推荐信息]
     */
    public function rec($userid,$numberOfResults=15,$requesteditemtype="ITEM"){
        //拼接接口url
        $url_rec="{$this->serverUrl}/api/1.0/json/recommendationsforuser?apikey={$this->apikey}&tenantid={$this->tenantid}&userid={$userid}&numberOfResults={$numberOfResults}&requesteditemtype={$requesteditemtype}";
        //发起请求
        return $this->easy($url_rec);
    }

    /**
     * [获取历史记录]
     * @param  [type] $apikey          [API密钥]
     * @param  [type] $tenantid        [租户ID来识别您的网站]
     * @param  [type] $userid          [当前用户ID]  "24EH1723322222Z1"
     * @param  [type] $numberOfResults [记录返回数量,默认返回15条]
     * @return [json]                  [获取历史记录]
     */
    public function history($userid,$numberOfResults=15){
        //拼接接口url
        $url_histo="{$this->serverUrl}/api/1.0/json/actionhistoryforuser?apikey={$this->apikey}&tenantid={$this->tenantid}&userid={$userid}&numberOfResults={$numberOfResults}";
        //发起请求
        return $this->easy($url_histo);
    }

    /**
     * [获取查看最多]
     * @param  string  $timeRange       [时间范围:(DAY、WEEK、MONTH、ALL)]
     * @param  integer $numberOfResults [记录返回数量,默认返回50条]
     * @return [type]                   [description]
     */
    public function most($timeRange="All",$numberOfResults=50){
        //拼接接口url
        $url_most="{$this->serverUrl}/api/1.0/json/mostvieweditems?apikey={$this->apikey}&tenantid={$this->tenantid}&timeRange={$timeRange}&numberOfResults={$numberOfResults}";
        //发起请求
        return $this->easy($url_most);
    }

}

 类似资料: