自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL Server數(shù)據(jù)挖掘規(guī)則實現(xiàn)商品推薦2

大數(shù)據(jù)
假如你有一個購物類的網(wǎng)站,那么你如何給你的客戶來推薦產(chǎn)品呢?這個功能在很多電商類網(wǎng)站都有,那么,通過SQL Server Analysis Services的數(shù)據(jù)挖掘功能,你也可以輕松的來構(gòu)建類似的功能。

此篇在上一篇已經(jīng)構(gòu)建好挖掘模型的基礎(chǔ)之上,介紹如何構(gòu)建服務(wù)接口。

編寫服務(wù)接口的方法很多,比如使用WCF。為了簡便,這里直接使用ASP.NET Web Services。

將挖掘模型的具體查詢的實現(xiàn)部分寫到Web服務(wù)代碼中,主要是考慮到代碼分層降低耦合性。另外這部分邏輯通過服務(wù)的方式來暴露接口,可以方便其它任何平臺來進(jìn)行調(diào)用,比如ASP.NET, Winform, WPF或者其它基于java的技術(shù)框架等。Web服務(wù)最主要的部分是XML,一個服務(wù)接口往往就是一個URL地址,客戶端程序通過向這個地址發(fā)送xml請求的方式,來獲取服務(wù)端代碼的響應(yīng),結(jié)果再以xml的方式返回回來。那么既然來回通信的都是xml數(shù)據(jù),是否意味這還要手動寫代碼來序列化和反序列化xml數(shù)據(jù)呢?這里面又涉及到一個SOAP的概念,這是一個在10年前很火的概念,簡單對象訪問協(xié)議。通過這個SOAP協(xié)議,客戶端程序可以知道要訪問一個Web服務(wù),應(yīng)該發(fā)送什么樣的xml數(shù)據(jù),以及收到服務(wù)端xml的數(shù)據(jù)之后,本地再如何解析這些數(shù)據(jù)?;谶@樣一個方式,Visual Studio中,當(dāng)你引用一個服務(wù)的時候,它就會根據(jù)這個協(xié)議,在你本地生成若干代理類,這樣在你調(diào)用遠(yuǎn)程的一個Web服務(wù)的時候,你就會感覺像是在調(diào)用本地里的一個類的方法一樣方便。

筆者注:如果你用Winform和ASP.NET等,那么你也可以選擇直接在代碼里訪問挖掘模型的數(shù)據(jù),但是如果是其它平臺,比如Win 8 App, silverlight和flash等,它們是無法直接和數(shù)據(jù)源進(jìn)行通信的,所以只能通過服務(wù)的方法來訪問。

本篇就是要編寫這樣一個服務(wù)接口,這個服務(wù)接受客戶已經(jīng)購買的商品列表信息,然后根據(jù)這些信息來向用戶推薦其它商品。

服務(wù)的核心邏輯是根據(jù)傳送過來的商品列表,來動態(tài)的去拼DMX語句。在上一篇中提到的那個DMX語句,這里主要以它為"模版"。

根據(jù)上一篇的講解,我們知道需要變化的就是SELECT UNION SELECT的部分,一條商品對應(yīng)一個SELECT。

還有一個需要介紹的東西是ADOMD.NET,這個名字你看上去可能感覺有些面熟,沒錯,你肯定用過ADO.NET,還記得經(jīng)典方式操作數(shù)據(jù)庫的步驟嗎?新建Connection, Command然后DataReader或者其它方式來接收數(shù)據(jù)。ADOMD.NET就是專門用來訪問分析服務(wù)用的,由于它跟ADO.NET一樣都集成自同一接口,所以你可以找到熟悉的Connection和Command對象,而接收對象的除了DataReader外,還有跟DataSet相對應(yīng)的CellSet對象。

傳統(tǒng)的分析服務(wù)是包含多維模型和數(shù)據(jù)挖掘的,所以在ADOMD.NET下,可以拋MDX(查多維數(shù)據(jù)集用的)和DMX(查挖掘模型用的)。這里我們用的數(shù)據(jù)訪問接口就是ADOMD.NET。

  1. SELECT FLATTENED 
  2. PredictAssociation([Association].[v Assoc Seq Line Items],INCLUDE_STATISTICS,3) 
  3. FROM 
  4. [Association] 
  5. NATURAL PREDICTION JOIN 
  6. SELECT (SELECT 'Touring Tire' AS [Model] 
  7. UNION 
  8. SELECT 'Touring Tire Tube' AS [Model] 
  9. AS [v Assoc Seq Line Items]) AS t 

確認(rèn)好以上邏輯之后,我們開始構(gòu)建Web服務(wù)。

這里我們使用Visual Studio 2012來編寫服務(wù)。跟上一篇不同,上一篇為了編寫一個SQL Server 2012的分析服務(wù)項目,我們用的是SQL Server Data Tools,這個實際上就是Visual Studio 2010的一個Shell。而那個地方為什么用的版本是2010而不是2012?這里面有一個SQL Server和Visual Studio版本的一個對應(yīng)的關(guān)系。

SQL Server版本

對應(yīng)的Visual Studio Shell版本

2000

2005

2005

2008

2008

2012

2010

2012的下一個版本

2012

可以看到主要還是根據(jù)兩個產(chǎn)品系列的版本發(fā)布有關(guān)系。所以這里就有一個地方需要留意,如果你的機(jī)器上同時安裝了Visual Studio 2012和SQL Server 2012,那么當(dāng)你打開一個類似上一篇中建立的分析服務(wù)項目的時候,不要默認(rèn)雙擊打開項目文件,因為系統(tǒng)會用Visual Studio 2012 (不是應(yīng)該與其對應(yīng)的2010)來打開你的項目,然后提示你將項目升級到2012。不用想,對應(yīng)Visual Studio 2012 Shell的SQL Server版本還沒發(fā)布呢,所以即使升級了最后也一定是失敗。

下面言歸正傳,打開Visual Studio 2012。點擊菜單欄FILE->New Project。

項目類型選擇ASP.NET Empty Web Application。

點擊OK新建一個新ASP.NET項目。

在Solution Explorer中,右鍵項目名稱,點Add->New Item。

在Add New Item中,選擇Web Service。然后點Add。

然后可以看到系統(tǒng)自動生成的測試用的服務(wù)代碼。

下面首先添加ADOMD.NET引用。右鍵項目目錄,選擇Add Reference。

ADOMD.NET組件不會默認(rèn)出現(xiàn)在這里。需要點擊Browse手動去找。

通常ADOMD.NET組件的位置是位于這個目錄下:

C:\Program Files\Microsoft.NET\ADOMD.NET\110

找到Microsoft.AnalysisServices.AdomdClient.dll,點OK。

可以看到ADOMD.NET組件已經(jīng)被添加到引用目錄下。

然后,回到Web服務(wù)代碼界面,在代碼中using這個庫的引用。

然后為服務(wù)編寫代碼,首先定義一個類,服務(wù)的結(jié)果將以這個類的結(jié)構(gòu)返回。

 

  1. public class ModelResult 
  2. public string ModelName { getset; } 
  3. public double Support { getset; } 
  4. public double Probility { getset; } 

 

定義好這個類之后,再編寫服務(wù)代碼,這里直接貼出來:

 

  1. [WebMethod] 
  2. public List<ModelResult> GetModelResult(List<string> ModelList) 
  3. List<ModelResult> result = new List<ModelResult>(); 
  4. bool FirstOne = true
  5. //Build DMX query 
  6. StringBuilder sb = new StringBuilder(); 
  7. sb.AppendLine("SELECT FLATTENED"); 
  8. sb.AppendLine("PredictAssociation([Association].[v Assoc Seq Line Items],INCLUDE_STATISTICS,3)"); 
  9. sb.AppendLine("FROM"); 
  10. sb.AppendLine("[Association]"); 
  11. sb.AppendLine("NATURAL PREDICTION JOIN"); 
  12. sb.AppendLine("("); 
  13. foreach (string item in ModelList) 
  14. if (FirstOne == true
  15. sb.AppendLine("SELECT (SELECT '" + item + "' AS [Model]"); 
  16. FirstOne = false
  17. else 
  18. sb.AppendLine("UNION"); 
  19. sb.AppendLine("SELECT '" + item + "' AS [Model]"); 
  20. sb.AppendLine(") AS [v Assoc Seq Line Items]) AS t"); 
  21. AdomdConnection conn = new AdomdConnection(); 
  22. conn.ConnectionString = "Provider=MSOLAP.3;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=MultidimensionalProject1;Data Source=."
  23. conn.Open(); 
  24. AdomdCommand comm = new AdomdCommand(sb.ToString(), conn); 
  25. AdomdDataReader dr = comm.ExecuteReader(); 
  26. //Read result 
  27. while (dr.Read()) 
  28. ModelResult mr = new ModelResult(); 
  29. mr.ModelName = dr[0].ToString(); 
  30. mr.Support = Convert.ToDouble(dr[1]); 
  31. mr.Probility = Convert.ToDouble(dr[2]); 
  32. result.Add(mr); 
  33. conn.Close(); 
  34. return result; 

留意貼出的這段代碼第一行,有一個[WebMethod],Web服務(wù)的方法跟一個類的傳統(tǒng)方法區(qū)別就在這里,只有在方法前面打上這個標(biāo)記才會被系統(tǒng)認(rèn)為是一個Web服務(wù)方法發(fā)布出去。

代碼中先根據(jù)上一篇提到的DMX語句的查詢"模版",中簡通過一個foreach循環(huán)來動態(tài)構(gòu)建SELECT UNION SELECT部分。最后通過Connection和Command對象以及DataReader方法來讀取結(jié)果,并且把其加載到類里。

然后,為了方便測試,再加一個測試服務(wù)方法:

 

  1. [WebMethod] 
  2. public List<ModelResult> GetModelResultTest(string ModelSingle) 
  3. List<string> ModelList = new List<string>(); 
  4. ModelList.Add(ModelSingle); 
  5. return GetModelResult(ModelList); 

 

這個方法實際上還是調(diào)用了剛才建立的服務(wù)方法,只不過它只傳遞了一個商品過來,在這里打包成一個List后丟掉那個方法里。

這樣,在ASP.NET自帶的服務(wù)瀏覽界面中就可以測試我們剛才編寫的方法了。右鍵asmx文件點View in Browser。

然后可以看到系統(tǒng)自動為服務(wù)建立的簡單測試頁面。

這里點擊GetModelResultTest方法。

在參數(shù)值中輸入'Touring Tire',點"調(diào)用"。

最后,就可以看到服務(wù)返回的結(jié)果信息。信息的格式是通過xml的,你無需去解析它,通過前面提到的SOAP協(xié)議,系統(tǒng)會為你建立相應(yīng)的本地代理類。

至此,為挖掘模型編寫的服務(wù)層代碼就編寫完畢了。下一篇將建立一個應(yīng)用程序來調(diào)用這個服務(wù)從而實現(xiàn)一個簡單的商品推薦功能。

原文鏈接:http://www.cnblogs.com/aspnetx/archive/2013/02/24/2924091.html

【編輯推薦】

1.SQL Server數(shù)據(jù)挖掘規(guī)則實現(xiàn)商品推薦1

責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2013-02-25 10:33:36

2011-07-25 16:05:27

SQL SERVER數(shù)Web路徑流挖掘

2011-08-11 16:16:26

SQL Server數(shù)據(jù)挖掘

2009-02-16 13:21:25

數(shù)據(jù)挖掘SQL Server SQL Server

2010-07-05 17:55:26

SQL Server更

2010-07-12 12:41:16

SQL Server

2009-04-13 10:15:24

SQLServer 2005數(shù)據(jù)挖掘

2011-07-25 15:17:50

SQL SERVER數(shù)

2011-07-25 14:56:00

SQL SERVER數(shù)

2010-11-11 14:05:17

SQL Server排

2009-07-03 19:58:51

SQL Server2

2011-04-01 12:19:21

SQL Server商業(yè)智能

2010-11-11 14:14:52

SQL Server排

2010-07-21 10:27:49

SQL Server

2010-07-08 11:15:37

SQL Server數(shù)

2010-07-21 10:05:29

SQL Server排

2009-08-05 10:00:04

數(shù)據(jù)挖掘算法SQL Server

2009-02-16 09:35:19

業(yè)務(wù)規(guī)則鏈接SQL Server

2010-07-12 09:10:05

SQL Server數(shù)

2011-03-29 15:42:08

SQL Server鏈接
點贊
收藏

51CTO技術(shù)棧公眾號