如何在Coldfusion / MySQL中跟踪产品搜索引擎中的泛型命中?

时间:2012-08-25 15:07:10

标签: mysql coldfusion statistics search-engine resultset

我正在使用Coldfusion8/MySQL 5.0.88并进行产品搜索,我正在尝试添加一些自定义搜索统计信息。

我有一个表格来保存产品搜索点击,我现在正在寻找最好和最省时的方法来填充它。

我会像这样在表格中插入条目:

<cfquery datasource="db">
    INSERT INTO statistics_search_hits ( iln, artikelnummer, source, viewed, zeitstempel )
    VALUES(   <cfqueryparam value = "#results.sellerID#" cfsqltype="cf_sql_varchar" maxlength="13">
            , <cfqueryparam value = "#results.style#" cfsqltype="cf_sql_varchar" maxlength="35">
            , <cfqueryparam value = "#Session.skin#" cfsqltype="cf_sql_varchar" maxlength="13">
            , "detail"
            , now() 
            )
</cfquery>

如果我正在提取单个记录(detail),这很容易包含,但我想知道存储通用搜索的内容和方法。

假设用户正在进行返回500结果的搜索,我一次只会显示24个,但为了获得正确的统计信息,我必须在我的点击计数器中输入500个条目。

问题:
最好的方法是什么?我想在用户继续浏览页面时使用CFThread来运行,但我甚至不确定我想要500次访问数据库。欢迎任何关于良好方法的指示。

谢谢!

PS:我不想为此使用Google Analytics。

1 个答案:

答案 0 :(得分:1)

这可能不是您正在寻找的,但您当然可以使用分号连接MS-SQL语句。

INSERT INTO statistics_search_hits ( iln, artikelnummer, source, viewed, zeitstempel )
VALUES(   <cfqueryparam value = "#results.sellerID#" cfsqltype="cf_sql_varchar" maxlength="13">
        , <cfqueryparam value = "#results.style#" cfsqltype="cf_sql_varchar" maxlength="35">
        , <cfqueryparam value = "#Session.skin#" cfsqltype="cf_sql_varchar" maxlength="13">
        , "detail"
        , now() 
        );
INSERT INTO statistics_search_hits ( iln, artikelnummer, source, viewed, zeitstempel )
VALUES(   <cfqueryparam value = "#results.sellerID#" cfsqltype="cf_sql_varchar" maxlength="13">
        , <cfqueryparam value = "#results.style#" cfsqltype="cf_sql_varchar" maxlength="35">
        , <cfqueryparam value = "#Session.skin#" cfsqltype="cf_sql_varchar" maxlength="13">
        , "detail"
        , now() 
        )
INSERT INTO statistics_search_hits ( iln, artikelnummer, source, viewed, zeitstempel )
VALUES(   <cfqueryparam value = "#results.sellerID#" cfsqltype="cf_sql_varchar" maxlength="13">
        , <cfqueryparam value = "#results.style#" cfsqltype="cf_sql_varchar" maxlength="35">
        , <cfqueryparam value = "#Session.skin#" cfsqltype="cf_sql_varchar" maxlength="13">
        , "detail"
        , now() 
        );

您可以将语句写入文件,并让MySQL按计划导入它们。因此,您可以将文件写入日志记录目录,然后进入CFSCHEDULE / CFEXECUTE进程并按计划处理文件。

你也可以尝试一下方便的INSERT INTO ... SELECT语句。如果您的搜索结果仍然来自数据库,您可以设计一个SELECT语句,从数据库重建相同的结果,并使用CF中的一些常量批量插入它。

INSERT INTO statistics_search_hits ( iln, artikelnummer, source, viewed, zeitstempel )
SELECT #reseller_id# as iln, searchtable.article, searchtable.source, 1, #now()#
FROM SearchTable
WHERE [search criteria statements here...]

最后,您可以构建一个存储过程来将批量条目传递给SQL服务器。

传递查询数据的CFThread听起来也是一个好主意,但如果你有一个繁忙的网站,你最好注意可能产生多少线程,特别是如果用户不断执行搜索。检查您的ColdFusion版本中的CF线程限制以及管理员中的设置。

希望这些通用指针有所帮助! ^ _ ^