将Kentico智能搜索索引分配给CMSSearchResults控制数据源

时间:2016-01-21 17:21:07

标签: c# asp.net kentico

编辑:也许这会让我的问题更清晰。我想这样做,但使用CMSSearchResults控件和搜索索引作为DataSource:

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

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

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

我正在尝试实现自定义搜索用户控件。我的ascx文件中有一个<cms:CMSSearchResults>控件,如下所示:

<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树。

所以,我期待SearchIndexInfo中的一个方法可以解析索引文件并将b-tree作为LinkedList<t>或者可以提供一些参数的方法返回。将链表排序为DataSet - 或至少进行解析并允许我进行转换。没有这样的运气,我不知道从哪里开始。

我应该如何将搜索索引DataSet绑定到CMSSearchResults控件?

1 个答案:

答案 0 :(得分: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;
}