#lucene #lucene.net #umbraco
#lucene #lucene.net #umbraco
Вопрос:
Я использую Umbraco и наткнулся на Lucene. Я нашел много кода и статей на Lucene, но я все еще не могу создать приемлемый поиск.
У меня есть несколько полей для поиска, например. «Имя узла» и «Основной текст»
Что мне нужно:
-
Когда я ищу «мужская обувь», он должен возвращать только результаты, содержащие как «мужчины», так и «обувь», но также возвращать страницу, где в имени узла указано только «обувь», а в тексте тела указано только «мужчины».
-
Когда я ищу «обувь», я хочу, чтобы результаты содержали «обувь» или «shoes». но не «мотыги», если это возможно
-
Увеличьте поле nodeName
-
Получаем фрагмент основного текста, содержащий совпадающие слова
-
Выделите совпадающие слова как в названии страницы, так и в фрагменте основного текста
Кто-нибудь когда-нибудь делал это?
Комментарии:
1. Да, Lucene делает все, что вам нужно, и гораздо больше. Однако, поскольку вы, похоже, новичок, я бы рекомендовал использовать Apache Solr (который представляет собой поисковый сервер, построенный на базе Lucene и предлагающий множество функций «из коробки», без необходимости возиться с внутренностями.
2. Спасибо. Как мне использовать это с Umbraco …?
Ответ №1:
Это может помочь вам начать.
var manager = ExamineManager.Instance;
var searcher = manager.SearchProviderCollection["YOURSearcher"];
var query = manager.SearchProviderCollection["YOURSearcher"].CreateSearchCriteria(BooleanOperation.Or)
.Field("nodeName", keywords.Boost(10))
.Or().Field("nodeName", keywords.Fuzzy())
.Or().Field("bodyContent", keywords.Boost(5))
.Or().Field("otherField", keywords.Boost(3));
var results = searcher.Search(query.Compile());
Комментарии:
1. Спасибо, Киран! Что такое ключевые слова? Это не строка, не так ли? Потому что строка не имеет метода Boost.
2. Это расширение к строке, которое необходимо добавить с помощью Examine . LuceneEngine. Критерии поиска;
3. Когда я ищу несколько слов, он никогда не возвращает никаких результатов
Ответ №2:
Код Джонатана Латиги работает, это самый похожий на Google, который я смог найти на данный момент