2016-01-21 108 views
0

編輯:也許這會讓我的問題更清楚。我想這樣做,但有CMSSearchResults控制和數據源搜索索引:分配Kentico智能搜索索引到CMSSearchResults控制數據源

// code-in-front 
<asp:Repeater ID="Repeater" ruant="server"></asp:Repeater> 

// code behind 
private void BindDataToRepeater() 
{ 
    DataSet ds = PopulateDataSet(); 

    repStuff.DataSource = ds; 
    repStuff.DataBind(); 
} 

我想實現一個自定義搜索用戶控制。我有一個<cms:CMSSearchResults>控制在我的ascx文件,像這樣:

<cms:CMSSearchResults ID="ssIssues" runat="server"></cms:CMSSearchResults> 

在我後面的代碼我的工作應該獲取一個典型的自定義表格的智能搜索索引和索引作爲中使用的數據的方法數據來源ssIssues。這裏是我到目前爲止,應該給你,我想要做什麼的一個粗略的想法:

private void BindSearchResults() 
{ 
    SearchIndexInfo si = SearchIndexInfoProvider.GetSearchIndexInfo(int searchIndexId); 

    // some tweaking to convert si to dataset 

    ssIssues.DataSource = si; 
    ssIssues.DataBind(); 
} 

但是,馬上蝙蝠我遇到一些問題,似乎無法找到任何這些文檔將幫助我理解搜索API的這一部分。

我得到正確的SearchIndexInfo對象,但它似乎沒有任何方式訪問索引中的實際數據。現在,我理解搜索索引如何在kentico中工作的原因是他們分析SQL Server中的一組數據,並將這些數據轉換爲存儲在Kentico項目的Web服務器的文件系統中的b-tree。

所以,我在SearchIndexInfo這並沿解析該索引文件,並返回b樹爲LinkedList<t>或可提供一些參數的方法線的東西期望的方法進行排序鏈表成DataSet - 或者至少做了解析並允許我進行轉換。雖然沒有這樣的運氣,我不確定該從哪裏出發。

究竟應該如何將搜索索引DataSet綁定到CMSSearchResults控件?

+0

您的控件的哪些部分是自定義的,或者是OOTB控件無法執行的操作?除了編寫自定義代碼之外,您期望的結果是什麼? –

+0

我正在使用OOTB Kentico控件 - 這些將不會自定義,並且我正在嚴格使用默認的Kentico API(v7)。我正在開發的用戶控件將使用默認的Kentico搜索控件 - 搜索結果,搜索過濾器,搜索對話框 - 但將動態地填充它們的屬性並基於一些複雜的邏輯觸發事件。我在用戶控件中設置它,因爲在Visual Studio中管理所有移動的部分要比在Kentico UI中工作要容易得多。如上所述,我只是試圖將數據從搜索索引綁定到搜索結果控件。 – Jerreck

+0

所以從技術上說,是的,他們是習慣。雖然您使用的是OOTB控件,但您可以使用自己的邏輯創建自己的控件,以複製已經編碼的相同內容,您可以從UI中使用該控件。回到我的其他問題,你期望的結果是什麼?你想讓用戶的文本框輸入文本嗎?你想過濾嗎?你想要一個自定義的列表視圖嗎? –

回答

1

一旦你已經開始定製,我建議你從頭開始構建你自己的控件,但是利用Kentico搜索API從搜索索引中獲取數據。以下是來自Kentico API的代碼片段示例:

private bool SearchText() 
{ 
    // Get the search index 
    SearchIndexInfo index = SearchIndexInfoProvider.GetSearchIndexInfo("MyNewIndex"); 

    if (index != null) 
    { 
     // Prepare parameters 
     SearchParameters parameters = new SearchParameters() 
     { 
      SearchFor = "home", 
      SearchSort = SearchHelper.GetSort("##SCORE##"), 
      Path = "/%", 
      ClassNames = "", 
      CurrentCulture = "EN-US", 
      DefaultCulture = CultureHelper.DefaultCulture.IetfLanguageTag, 
      CombineWithDefaultCulture = false, 
      CheckPermissions = false, 
      SearchInAttachments = false, 
      User = (UserInfo)CMSContext.CurrentUser, 
      SearchIndexes = index.IndexName, 
      StartingPosition = 0, 
      DisplayResults = 100, 
      NumberOfProcessedResults = 100, 
      NumberOfResults = 0, 
      AttachmentWhere = String.Empty, 
      AttachmentOrderBy = String.Empty, 
     }; 

     // Search 
     DataSet results = SearchHelper.Search(parameters); 

     // If found at least one item 
     if (parameters.NumberOfResults > 0) 
     { 
      return true; 
     } 
    } 

    return false; 
} 
+0

啊,我明白了。實際執行搜索的方法是SearchHelper類的一部分。我只需要索引的名稱(加上其他參數)來執行查詢。這很有道理。謝謝你,羅馬。 – Jerreck