Sitecore ContentSearch APIで実行されるLucene/Solrクエリを最適化しようとしています。具体的には、MultiListFieldを検索する場合です。Sitecore Lucene/Solrクエリを最適化する
環境: サイトコアの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*)))
基本的に、フィールド内の値の配列に別の配列の値が含まれているかどうかを確認する。事前にどうもありがとうございました。