2
我想优化通过Sitecore ContentSearch API完成的一些Lucene/Solr查询。具体来说,当涉及到搜索MultiListField时。优化Sitecore 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;
}
产生的Lucene的查询看起来是这样的:
((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*)))
基本上,检查字段中的值数组是否包含来自另一个数组的任何值。非常感谢你提前。