我们需要根据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会进行实际搜索吗?
感谢
答案 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字段中。