Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 优化Sitecore Lucene/Solr查询_Linq_Solr_Lucene_Sitecore_Sitecore8 - Fatal编程技术网

Linq 优化Sitecore Lucene/Solr查询

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

我试图优化一些通过Sitecore ContentSearch API完成的Lucene/Solr查询。具体来说,在搜索多列表字段时

环境: Sitecore 8.1u2,Solr

我使用以下方法查询multilistfield的值:

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*)))