Asp.net 使用API在整数字段上搜索Kentico智能搜索索引有困难
我有一个使用标准分析器的页面智能搜索索引。当我检查Luke中生成的索引时,我可以看到整数字段具有特定的格式。例如,全局管理员创建的所有页面都将Asp.net 使用API在整数字段上搜索Kentico智能搜索索引有困难,asp.net,lucene,kentico,Asp.net,Lucene,Kentico,我有一个使用标准分析器的页面智能搜索索引。当我检查Luke中生成的索引时,我可以看到整数字段具有特定的格式。例如,全局管理员创建的所有页面都将documentcreatedbyuserid字段设置为1000000053 阅读本文时,我发现需要使用特定语法搜索类似的整数字段: +DocumentCreatedByUserID;(int)53;管理员 但是,当我将这个字符串作为searchQuery变量传递给下面的代码时,我没有得到任何结果 // Get search results
documentcreatedbyuserid
字段设置为1000000053
阅读本文时,我发现需要使用特定语法搜索类似的整数字段:
+DocumentCreatedByUserID;(int)53;管理员
但是,当我将这个字符串作为searchQuery
变量传递给下面的代码时,我没有得到任何结果
// Get search results
var parameters = new SearchParameters()
{
AttachmentOrderBy = "",
AttachmentWhere = "",
CheckPermissions = false,
ClassNames = null,
CombineWithDefaultCulture = false,
CurrentCulture = this.Context.CultureCode,
DefaultCulture = CultureHelper.GetDefaultCultureCode(this.Context.SiteName),
DisplayResults = resultsPerPage,
NumberOfProcessedResults = 100,
Path = startPath,
SearchFor = searchQuery,
SearchInAttachments = false,
SearchIndexes = index,
SearchSort = sort,
StartingPosition = (page - 1) * resultsPerPage,
User = this.Context.User.UserInfo
};
ds = CMS.Search.SearchHelper.Search(parameters);
同样的代码也适用于文本字段搜索查询。谁能解释一下:
+DocumentCreatedByUserID最后一部分的目的是什么;(int)53;管理员
查询。为什么我需要在这里传递文本值+newstypeid:1000000034
,我会得到结果。所以,也许一个更简单的解决方案是找到一种将整数转换成Lucene格式的方法?(即34至1000000034)
使用解决方案更新
感谢@richard-Šůstek为我指明了正确的方向。以下方法将以所需格式返回搜索子句:
protected string GetIntegerIdClause(string field, int id)
{
var condition = string.Format("{0}:(int){1}", field, id).ToLower();
return SearchSyntaxHelper.CombineSearchCondition(null, new SearchCondition(condition, SearchModeEnum.ExactPhrase, SearchOptionsEnum.NoneSearch));
}
您是否可以尝试使用类似的方法来转换
searchQuery
var condition = new SearchCondition(null, searchModeEnum, SearchOptionsEnum.FullSearch);
searchQuery = SearchSyntaxHelper.CombineSearchCondition(searchText, condition);
我注意到Kentico在将值从搜索文本框传递到SearchParameters时在内部调用此方法。但是我还没有机会测试这个。也许SearchSyntaxHelper中的其他方法也会有用。我认为您应该使用命名空间CMS.Search中的SearchValueConverter类。这个类有静态方法将特定的数据类型值(int、datetime等)转换为它的字符串表示形式,以便构建搜索词。非常感谢。你的建议帮助我找到了解决办法。请参阅对我的OP的编辑,以获取实现您建议的解决方案的代码:)太棒了,我很高兴它有帮助:)这是一个相当广泛的猜测,因为我目前无法测试它。非常有用。你说得很对,这是一个更优雅的解决方案。非常感谢。啊,很好的方法:)我有完全相同的问题,但你的解决方案对我不起作用。即使查询在Luke工具中工作,我仍然无法从API中获得任何int字段的搜索结果。