在這裏,我正在嘗試獲取多個字詞的搜索結果。說全文=「李牛仔褲」,然後regexresult = {「李」,「牛仔褲」}。Sitecore search:按字詞獲取結果字詞
代碼:
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」和「牛仔褲」組合排序項目。
因此,我們必須得到「李」第一批結果,然後結果「牛仔褲」
有沒有辦法通過項,得到的結果項?
我不太清楚用例。你說你首先需要「李」的命中,然後是「牛仔褲」命中。但是,如果按字母順序排序,那麼整個結果集應按字母順序排序否?你能提供一些樣本輸入和預期的輸出嗎? –
@Christian當前的代碼情況正在做你說的。但那不是我需要的。考慮默認排序即。最新更新的項目。預期的情況。如果regexResult有{「Jack」,「Daniels」}那麼我們應該:首先,獲取「Jack」的最新更新項目。其次,獲取「Daniels」的最新更新項目。所以,結果將是第一個,然後是第二個。 –
我不同意你的邏輯。如果您在Google中輸入「Jack Daniels」,那麼您會希望它與* Jack和Daniels *中的所有內容匹配最相關,任何其他排序都應該忽略其他所有內容,然後按照該條件進行排序。但無論如何,我已經用一個可能的解決方案更新我的答案... – jammykam