所以这里是总结:
Sitecore - SOLR 索引查询
我有一些我试图使用一组不同的网站检索的项目。
我有一个查询:
query = query.Where(x => x.Language == this.ItemLanguage)
.Where(x => x.Templates.Contains(new Guid("94c1f3e5ac174a319cc5bbb942fe80c6")));
这将正确返回所有项目。
我需要为此查询添加一个动态列表调用。
就像是:
.Where(x => x.Site.Any(y => siteNames.Contains(y)));
我尝试添加这行代码,但出现错误:
System.ArgumentException: '参数必须是数组'
(一些细节)
返回的项目 (x) 的“站点”字段为List<string>
siteNames 是一个List<String>
可变站点名称
以下代码适用于其他地方:
.Where(x => x.Site.Contains("somesite"));
有没有办法管理动态列表,或者我需要根据 siteNames 列表中的项目数手动生成这个表达式?
.Where(x => x.Site.Contains("dynamic") || x.Site.Contains("dynamic")
|| x.Site.Contains("dynamic") || x.Site.Contains("dynamic")
|| and so on);
这是完整的代码示例:
using (var context = Sitecore.ContentSearch.ContentSearchManager.GetIndex(AccelConstants.SEARCH_INDEX).CreateSearchContext())
{
IQueryable<SearchResultModel> query = context.GetQueryable<LMSSearchResultModel>();
SearchResults<SearchResultModel> results = null;
List<string> siteNames = new List<string>();
siteNames = this.SiteNames;
// Define the base search
query = query.Where(x => x.Language == this.ItemLanguage)
.Where(x => x.Templates.Contains(new Guid("94c1f3e5ac174a319cc5bbb942fe80c6")))
.Where(x => x.Site.Any(p => siteNames.Contains(p)));
// Execute the query
results = query.GetResults();
}
site 字段是 Site_SM 的 solr 字段,其输出如下: 使用名称“Site”的原因是 Sites 也是一个字段。这不是我可以控制的代码,所以我正在使用我所拥有的。
“site_sm”:[“登录”,“管理员”,“服务”,“covid19”,“调度程序”,“系统”,“发布者”],
搜索结果模型只是将计算的 solr 字段转换为 c#
public class SearchResultModel : SearchResultItem
{
[IndexField("_templates")]
public List<Guid> Templates { get; set; }
[IndexField("site_sm")]
public List<string> Site { get; set; }
}