Здесь я пытаюсь получить результаты поиска для нескольких терминов. Скажите fulltext = «Lee jeans», затем regexresult = {«lee», «jeans»}.Поиск по Sitecore: Получить результаты в терминах
Код:
IProviderSearchContext searchContext = index.CreateSearchContext();
IQueryable<SearchItem> scQuery = searchContext.GetQueryable<SearchItem>();
var predicate = PredicateBuilder.True<SearchItem>();
//checking if the fulltext includes terms within " "
var regexResult = SearchRegexHelper.getSearchRegexResult(fulltext);
regexResult.Remove(" ");
foreach (string term in regexResult)
{
predicate = predicate.Or(p => p.TextContent.Contains(term));
}
scQuery = scQuery.Where(predicate);
IEnumerable<SearchHit<SearchItem>> results = scQuery.GetResults().Hits;
results=sortResult(results);
Сортировка основана на Sitecore полей:
switch (query.Sort)
{
case SearchQuerySort.Date:
results = results.OrderBy(x => GetValue(x.Document, FieldNames.StartDate));
break;
case SearchQuerySort.Alphabetically:
results = results.OrderBy(x => GetValue(x.Document, FieldNames.Profile));
break;
case SearchQuerySort.Default:
default:
results = results.OrderByDescending(x => GetValue(x.Document, FieldNames.Updated));
break;
}
Теперь, что мне нужно, чтобы иметь результаты для «подветренной» первым и сортирует их, а затем найти результаты для " джинсы "и сортировать их. Окончательный результат поиска будет иметь конкатенированные наборы отсортированных элементов для «lee», а затем для «джинсов».
Таким образом, мы должны получить результаты для «подветренного» первого, а затем результатов для «джинсов»
Есть ли способ, чтобы получить результаты почленно?
Я не совсем понимаю, как использовать. Вы говорите, что сначала хотите, чтобы хиты «lee» сопровождались хитами «jeans». Но если вы сортируете по алфавиту, то весь набор результатов должен быть отсортирован по алфавиту нет? Можете ли вы предоставить примерный ввод с ожидаемым выходом? –
@Christian Текущий код ситуации делает то, что сказал. Но это не то, что мне нужно. Рассмотрим сортировку по умолчанию, т.е. последний обновленный элемент. Ожидаемый случай. Если regexResult имеет {"Jack", "Daniels"}, то мы должны: сначала получить последние обновленные элементы для «Jack». Во-вторых, получите последние обновленные элементы для «Daniels». Итак, результаты будут сначала, а затем вторыми. –
Я не согласен с вашей логикой. Если вы наберете «Джек Дэниелс» в Google, то вы ожидаете, что он будет соответствовать всем с помощью * Jack And Daniels * как наиболее актуальным, сортировка по чем-либо еще должна игнорировать все остальное и просто сортировать по этим критериям. Но в любом случае, я обновляю свой ответ с возможным решением ... – jammykam