Linq 优化Sitecore Lucene/Solr查询
我试图优化一些通过Sitecore ContentSearch API完成的Lucene/Solr查询。具体来说,在搜索多列表字段时 环境: Sitecore 8.1u2,Solr 我使用以下方法查询multilistfield的值:Linq 优化Sitecore Lucene/Solr查询,linq,solr,lucene,sitecore,sitecore8,Linq,Solr,Lucene,Sitecore,Sitecore8,我试图优化一些通过Sitecore ContentSearch API完成的Lucene/Solr查询。具体来说,在搜索多列表字段时 环境: Sitecore 8.1u2,Solr 我使用以下方法查询multilistfield的值: public static Expression<Func<SearchResultItem, bool>> MultiFieldContainsExpression(IEnumerable<string> fieldNames
public static Expression<Func<SearchResultItem, bool>> MultiFieldContainsExpression(IEnumerable<string> fieldNames, IEnumerable<string> ids)
{
//fieldNames = ["field_A", "field_X"]
//ids = [GUID_A, GUID_X]
Expression<Func<SearchResultItem, bool>> expression = PredicateBuilder.True<SearchResultItem>();
foreach (string fieldname in fieldNames)
{
ids.ForEach(id =>
{
expression = expression.Or(i => i[fieldName].Contains(IdHealper.NormalizeGuid(id, true)));
});
}
return expression;
}
我希望查询更像这样(如果可能,甚至更好):
基本上,检查字段中的值数组是否包含来自另一个数组的值。非常感谢。默认情况下,Sitecore将多列表字段索引为以空格分隔的小写Guid列表(Guid.ToString(“N”))。通过使用计算字段,将关系反规范化并将项目名称或内容存储在项目文档中可能很有用。使用Computed字段,它可以迭代引用的项,并将它们转换为包含其名称的单个字段。当您想要将结果限制为仅针对您知道确切Guid的情况的特定引用项时,您仍然希望保留案例的Guid字段
((field_A:(*GUID_A*) OR field_A:(*GUID_X*) OR field:_X:(*GUID_A*) OR field_X:(*GUID_X*)))
((field_A:(*GUID_A* OR *GUID_X*) OR (field_X:(*GUID_A* OR *GUID_X*)))