Итак, вот сводка:
Sitecore - запрос индекса SOLR
У меня есть элементы, которые я пытаюсь получить, используя набор сайтов, которые могут различаться.
У меня есть запрос:
query = query.Where(x => x.Language == this.ItemLanguage)
.Where(x => x.Templates.Contains(new Guid("94c1f3e5ac174a319cc5bbb942fe80c6")));
, который вернет все элементы правильно.
Мне нужно добавить динамический c список вызовов для этого запроса.
Что-то вроде:
.Where(x => x.Site.Any(y => siteNames.Contains(y)));
Я попытался добавить эту строку кода и получаю сообщение об ошибке:
System.ArgumentException: «Аргумент должен быть массивом»
(некоторые подробности)
Возвращенные элементы (x) имеют поле "Сайт" из List<string>
siteNames - это List<String>
переменных имен сайтов
Следующий код работает в других местах:
.Where(x => x.Site.Contains("somesite"));
Есть ли способ управления динамическим списком c или мне нужно будет вручную генерировать это выражение на основе количества элементов в siteNames list?
.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();
}
поле сайта - это поле solr для Site_SM, которое выдает вот так: Причина использования имени «Сайт» в том, что Сайты - это тоже поле. Это не тот код, который я контролирую, поэтому я работаю с тем, что имею.
"site_sm": ["login", "admin", "service", "covid19", "scheduler" "," system "," publisher "],
Модель результатов поиска просто преобразует вычисленные поля solr в c#
public class SearchResultModel : SearchResultItem
{
[IndexField("_templates")]
public List<Guid> Templates { get; set; }
[IndexField("site_sm")]
public List<string> Site { get; set; }
}