Я Sitecore страниц/Lucene документы со следующими полями:Sitecore Поиск Predicate Builder множественный поиск ключевых слов с повышения не работает по желанию
- Название
- Имя файла
- Содержание
- Содержимое файла
Я создаю их поиск и предъявляю следующие требования:
- Хиты, содержащие всю фразу в заголовке поле должно быть возвращено сперва.
- Хиты, содержащие всю фразу в filename Поле должно быть возвращено во-вторых.
- Hits, содержащий всю фразу в содержании должен быть возвращен третьим
- Hits, содержащего всю фразу в содержании файла должен быть возвращен четвёртой
- Хитов содержащих все ключевых слов (в любом порядке) в поле заголовка должен быть возвращен пятым
- Хитов содержащих все ключевых слов (в любом порядке), в поле имени файла должно быть возвращено шестой
- Хиты, содержащие все ключевых слов (в любом порядке) в содержание должно быть возвращено седьмое.
- Хиты, содержащие все ключевых слов (в любом порядке) в содержание файла должно быть возвращено восьмое.
Вот что я получил:
public static Expression<Func<T, bool>> GetSearchTermPredicate<T>(string searchTerm)
where T : ISearchableItem
{
var actualPhrasePredicate = PredicateBuilder.True<T>()
.Or(r => r.Title.Contains(searchTerm).Boost(2f))
.Or(r => r.FileName.Contains(searchTerm).Boost(1.5f))
.Or(r => r.Content.Contains(searchTerm))
.Or(r => r.DocumentContents.Contains(searchTerm));
var individualWordsPredicate = PredicateBuilder.False<T>();
foreach (var term in searchTerm.Split(' '))
{
individualWordsPredicate
= individualWordsPredicate.And(r =>
r.Title.Contains(term).Boost(2f)
|| r.FileName.Contains(term).Boost(1.5f)
|| r.Content.Contains(term)
|| r.DocumentContents.Contains(term));
}
return PredicateBuilder.Or(actualPhrasePredicate.Boost(2f),
individualWordsPredicate);
}
Реальная фраза часть кажется, работает хорошо. Сначала возвращаются хиты с полной фразой в заголовке. Однако, если я удаляю слово из середины фразы, результаты не возвращаются.
У меня есть страница с заголовком «Футбольная команда Англии ужасна», но когда я ищу «Футбольная команда ужасна», она не находит страницу.
Примечание: страницы могут иметь прикрепленные к ним документы, поэтому я хочу также увеличить имена файлов, но не так сильно, как заголовок страницы.