Я изучаю новый API Sitecore.ContentSearch
«LINQ to Sitecore» в Sitecore 7. Насколько я понимаю, Sitecore рекомендует использовать новый API LINQ поверх существующего API Sitecore.Search
, однако я изо всех сил стараюсь выполнить даже самые простые запросы.Как выполнить поиск нескольких терминов в Sitecore 7 ContentSearch API?
Возьмем, например, следующий поисковый запрос: "hello world"
.
Используя API Sitecore.Search
, термины «мир привет» обычно передаются через 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));
}
UPDATE
Я убежден, что я что-то на самом деле просто не хватает. Разумеется, со всей работой, которая вошла в новый API поиска, этот простой пример использования не был пропущен ... правильно?
Как обходной путь, я попытался открыть по умолчанию sitecore_web_index
с помощью существующего SearchManager, однако это не сработает.
К сожалению, мне пришлось прибегнуть к существующему API, пока не смогу это понять. Я обязательно буду обновлять этот вопрос своими выводами.
ОБНОВЛЕНИЕ 2
Я нашел Sitecore.ContentSearch.Utilities.LinqHelper
класс, который частично решает проблему. Вы можете использовать его для динамического построения запроса, подобного BooleanQuery
в Lucene.Net, однако его параметры ограничены, и это добавляет немного накладных расходов.
Эта статья в блоге может помочь http://www.sitecore.net/Community/Technical-Blogs/Getting-to-Know-Sitecore/Posts/2013/06/Using-Luke-to-Understand-Sitecore- 7-Search.aspx? KeepThis = true & TB_iframe = true & height = 650 & width = 850 – geedubb
@geedubb Спасибо за ссылку! Инструмент LinqScratchPad определенно пригодится. Тем не менее, я все еще не могу найти пример запроса стиля OR или тот, который использует любой вид разбора запросов. Они показывают только, как соответствовать на основе простых критериев, таких как '_templatename ==" X ". Хотя это полезно, я просто пытаюсь внедрить поисковый поиск на этом этапе. –