2016-08-17 3 views
0

Я использую sitecore 8, и я ищу способ запуска полнотекстового поиска для всего моего содержимого sitecore. У меня есть решение на месте, но я чувствую, что должен быть лучший способ сделать это.Sitecore: Полнотекстовый поиск с использованием lucene

Мой подход: У меня есть вычисленное поле, которое объединяет все текстовые поля в одно вычисленное поле. Прежде чем я выполнил поиск, я пронумерую свой текст поиска и построю предикат ORed для соответствия в поле.

Мне не нравится этот подход, потому что он становится очень сложным, если мне нужно увеличить элементы, соответствующие названию, против тела i.e. я потеряю повышение уровня поля.

FYI: мой код очень похож на этот so post.

Благодаря

ответ

1

Sitecore уже поддерживает полное текстовое поле, _content, который содержит все текстовые поля. Вы можете запустить свой поиск против этого. Вы даже можете создать вычисленные поля, которые добавляются к _content (например, пример содержимого источника данных here).

Так если вы строите запрос LINQ для вашего полнотекстового поиска, и уже отфильтрованы по шаблонам, последней версии, расположение и т.д., добавляя условия поиска на запрос будет выглядеть следующим образом:

var terms = SearchTerm.Split(); 
var currentExpression = PredicateBuilder.True<SiteSearchResultItem>(); 
foreach (var term in terms) 
{ 
    //Content is mapped to _content 
    currentExpression = PredicateBuilder.And(currentExpression, x => x.Content.Contains(term)); 
} 
query = query.Where(currentExpression); 

Обычно вы хотите И искать условия, а не ORing их.

Вы правы, что повышение уровня поля в этом случае теряется. В конце концов, Lucene не является отличным решением для создания качественного полнотекстового поиска по сайту. Если это важное требование, вы можете посмотреть Coveo или даже что-то вроде поиска в Google Site.

Смежные вопросы