Как выполнить поиск по нескольким терминам в Sitecore 7 ContentSearch API?
Я изучаю новыйSitecore.ContentSearch
API "LINQ to Sitecore" в Sitecore 7. Насколько я понимаю, Sitecore рекомендует использовать новый API LINQ поверх существующихSitecore.Search
API, однако, я изо всех сил пытаюсь выполнить даже самые простые запросы.
Возьмем, к примеру, следующий поисковый запрос:"hello world"
.
С помощьюSitecore.Search
API, термины «привет мир» обычно передаются черезQueryParser
что приведет к документам, совпадающим со словом "привет" или "мир". Документы, содержащие оба термина, будут оцениваться выше, чем документы, содержащие только один.
Как выполнить этот же запрос с помощью LINQ?
Вот что я попробовал:
var results = SearchContext.GetQueryable<MyResultItem>();
var terms = searchTerm.Split(' ');
// Not supported exception
results = results.Where(r => terms.Any(t => r.Content.Contains(r)));
// Close, but performs an "AND" between terms, and does not appear
// to score documents properly
foreach (var term in terms)
{
results = results.Where(r => r.Content.Contains(t));
}
ОБНОВИТЬ
Я убежден, что мне не хватает чего-то действительно простого. Конечно, со всей работой, которая была включена в новый API поиска, этот простой вариант использования не был пропущен ... верно?
В качестве обходного пути я попытался открыть дефолтsitecore_web_index
используя существующий SearchManager, однако, это не работает.
К сожалению, мне пришлось прибегнуть к существующему API, пока я не смог понять это. Я буду уверен, чтобы обновить этот вопрос с моими выводами.
ОБНОВЛЕНИЕ 2
Я нашелSitecore.ContentSearch.Utilities.LinqHelper
класс, который частично решает проблему. Вы можете использовать его для динамического построения запроса, аналогичногоBooleanQuery
в Lucene.Net, однако, его возможности ограничены, и это увеличивает производительность.