我们有一个非常广泛的索引,我们用于网站范围内的多个内容搜索。我想添加一个只有管理员可以搜索的新字段 - 普通用户不应该搜索它。
目前看来,将搜索字段列入黑名单的唯一方法是使用SearchParamaters.SearchFields
,但这需要列出每个其他字段,这是不理想的,因为我们的索引偶尔会增长,并且需要记住添加到此列表。
或者,我们可以使用反射来构建此列表,如果这是我们唯一的选择,我们可以选择这条路线。只是希望我有另一种选择。
答案 0 :(得分:1)
虽然这不是理想的,但我最终创建了[Searchable]
和[AdminSearchable]
属性,并在搜索文档类的所有属性上进行了修饰:
[Searchable]
public string UserName { get; set; }
[Searchable]
public string UserDisplay { get; set; }
[AdminSearchable]
public string UserEmail { get; set; }
然后使用这些static
字段构建可搜索字段列表,具体取决于当前用户是否为管理员:
private static readonly string[] _PublicSearchFeilds =
typeof(SearchDocument).GetProperties()
.Where(p => System.Attribute.IsDefined(p, typeof(SearchableAttribute)))
.Select(p => p.Name.ToLowerCamelCase()).ToArray();
private static readonly string[] _AdminSearchFeilds =
typeof(SearchDocument).GetProperties()
.Where(p =>
System.Attribute.IsDefined(p, typeof(SearchableAttribute)) ||
System.Attribute.IsDefined(p, typeof(AdminSearchableAttribute)))
.Select(p => p.Name.ToLowerCamelCase()).ToArray();
并将其传递给SearchParameters.SearchFields
。
答案 1 :(得分:0)
目前无法指定要从搜索中排除的字段列表。您可以在User Voice上添加此功能作为功能请求,以帮助我们确定优先顺序。