Kentico智能搜索索引 - 用API读取它的任何方式?

时间:2016-11-10 14:50:59

标签: json search model-view-controller kentico typeahead

我们需要根据Kentico搜索索引获得一个搜索框自动完成工作,但是一半的网站位于CMS应用页面中,一半位于MVC中。因此,自动完成webpart适用于CMS应用页面,但不适用于MVC页面。

我们正在探索的一个选项是在网站的两侧使用Twitter Typeahead js库,这需要搜索条件位于json文件中。

因此,我们希望能够通过Kentico API加载搜索索引术语,然后将其写入json文件。

SearchIndexInfo对象似乎没有办法获取它写入索引文件的索引条件。

更新

为了澄清:我们可以通过API进行搜索,但searchresultitems只返回标题和内容字段,并且它们不包含存储在索引文件中的所有搜索词。

例如,自定义页面类型的搜索索引可能会根据DocumentName,Description,Location,City,Company Name,DesignCategory字段构建索引。所有这些都将存储在某个地方的索引中,那么我们如何读取存储在索引中的术语?

不只是结果,只有DocumentName(标题)和Description(内容)。

我们基本上试图将搜索索引文件转换为json表示,而不是搜索结果。

当然,如果SmartSearchDialog webpart只对标题和内容字段进行预测性搜索,那么我们就会采用它,但我相信SmartSearchDialog会进行实际搜索吗?

感谢

2 个答案:

答案 0 :(得分:3)

它有API:

// Gets the search index
SearchIndexInfo index = SearchIndexInfoProvider.GetSearchIndexInfo("NewIndex");

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

    // Performs the search and saves the results into a DataSet
    System.Data.DataSet results = SearchHelper.Search(parameters);

    if (parameters.NumberOfResults > 0)
    {
        // The search found at least one matching result, and you can handle the results

    }
}

更多详情here

答案 1 :(得分:0)

Roman在评论中的回答看起来并不会起作用,而且在考虑它时,我们或许会尝试做一些过于复杂的事情而不是问正确的问题。

不是试图在json中复制搜索索引以供twitter typeahead自动完成使用,也许更好的方法是保持简单并只使用搜索结果的标题和内容字段。

然后,为了将更多字段放入搜索结果的内容字段(例如项目位置),我们可以自定义搜索构建代码(CMSLoaderAttribute)以将额外字段添加到SearchDocument的Content字段中。