Как сделать граненый поиск в Sitecore 7.x?
Может ли кто-нибудь указать мне какую-то документацию, которая дает пошаговое объяснение того, как сделать граненый поиск в Sitecore 7.x
? Я прочитал официальную документацию Sitecore (Руководство разработчика по корзинам предметов и поиску).
Я нашел этот документ очень запутанным. Глава 2 посвящена ведрам предметов. Ну, мне не нужны Предметные корзины для этого проекта. У меня не так много элементов контента. Глава 3 называется "Поиск", но я думаю, что речь идет о поиске элементов контента в Bucket Item изнутри в интерфейсе Sitecore.
Это интересно - но не то, что мне нужно. Глава 5 посвящена разработке с помощью Bucket Item. Но мне очень неясно, когда они говорят о поиске в интерфейсе Sitecore, и когда они говорят о создании поиска на вашем сайте.
То, что я ищу, - это четкое пошаговое объяснение того, как настроить индексы и фасеты, а затем конкретные примеры кода для выполнения фасетного поиска. Кто-нибудь знает, существует ли это где-нибудь в Интернете?
1 ответ
Существует хороший набор блогов и Google Hangouts, созданный командой разработчиков Sitecore для выпуска Sitecore 7 (в котором были представлены новые функции поиска). Вы можете получить доступ к ним здесь: http://www.sitecore.net/Learn/Blogs/Technical-Blogs/Sitecore-7-Development-Team/Posts/2013/10/Facets-Explained.aspx
С точки зрения настройки индексов используйте предоставленные файлы конфигурации, а именно Sitecore.ContentSearch.Lucene.Index.Web.config, и поиграйтесь с конфигурацией по мере необходимости. По умолчанию у вас уже есть три настроенных индекса (sitecore_content_web, sitecore_content_core и sitecore_content_master). Если вы хотите настроить, просто отредактируйте текущую конфигурацию. Раздел Locations конфигурации индекса наиболее актуален, и узлы должны быть самоочевидными, но основными являются;
- Корень: Определяет, где в дереве контента Sitecore будет проиндексировано (например, Sitecore/Content/MyStuff)
- База данных: указывает, какая база данных (главная, веб или основная) используется
Вы можете иметь много сканеров на индекс, но вам, вероятно, не нужно, и я бы не стал с этого начинать.
Что касается огранки, это в основном обусловлено расширением Linq FacetOn. Это может быть применено к запросу Linq в вашем индексе как таковое:
using (IProviderSearchContext context = ContentSearchManager.GetIndex(Constants._webContentIndexName).CreateSearchContext())
{
var model = new SearchResultViewModel();
//Get all items in home ordered by content data
//Faceted on semantics so will work with tagging
IQueryable<CustomSearchResultItem> query = context.GetQueryable<CustomSearchResultItem>()
.Where(i => i.Path.StartsWith(Constants._startPath))
.Where(i => i.Content.Contains(searchTerm))
.Where(i => i.TemplateId != exclusionTemplate)
.FacetOn(i => i.Semantics);
//DO SOMETHING WITH RESULTS
}
Просто чтобы прояснить любую путаницу, когда документы ссылаются на корзины товаров и т. Д., Это не отличается от того, как вы будете выполнять поиск. Самое замечательное в Sitecore заключается в том, что даже графический интерфейс пользователя построен на том же API, который вы используете для разработки своего решения. Таким образом, если внутренний поиск развивается вокруг элементов, вы можете использовать эти примеры в своем собственном поисковом решении.