Достижение релевантных результатов на вершине, используя повышение в Lucene.NET - PullRequest
0 голосов
/ 01 марта 2012

У нас есть ряд продуктов со словом «ipad», к ним относятся столы для iPad и аксессуары для iPad.Когда мы ищем в Lucene по слову «ipad», все аксессуары отображаются вверху, а iPad - на 25-й странице.Мы хотим вывести планшеты iPad на первую страницу.Мы просто индексируем названия продуктов и в процессе индексации добавляем 3 к названию планшетов ipad.Тем не менее, мы не получаем iPad на первую страницу.Ниже приведены некоторые из этих продуктов.Мы высоко ценим любую помощь.

  1. Планшет Apple iPad (первое поколение) MC496LL / A (32 ГБ, Wifi + 3G)
  2. Планшет Apple iPad 2 MC769LL / A (16 ГБ, Wifi,Черный) НОВАЯ МОДЕЛЬ
  3. Планшет Apple Ipad2 (Ipad 2), 64 ГБ Wi-Fi Only черный
  4. Планшет Apple iPad 2 MC764LL / A (64 ГБ, Wifi + Verizon 3G, черный)1011 * Зарядная станция для iHome для iPad
  5. Marware Eco-Vue для iPad
  6. iLuv Неопреновый чехол для iPad

1 Ответ

4 голосов
/ 04 марта 2012

Я думаю, что вы увеличиваете по полю то, что вам нужно сделать, чтобы улучшить весь документ, если это ipad, или то, что я бы сделал, это отрицательно повысить аксессуары.

Document doc = new Document();
doc.Add(new Field("name", name, Field.Store.YES, Field.Index.ANALYZED));   
doc.Add(new Field("category", category, Field.Store.YES, Field.Index.ANALYZED)); 
doc.Add(new Field("isaccesory", isaccesory.ToString(), Field.Store.NO, Field.Index.NOT_ANALYZED));  

if (isaccesory)
    doc.SetBoost(0.5); // Give all accessories lower relevance

writer.AddDocument(doc);

Вам придется поиграть со значениями усиления, если вы все еще видите аксессуары, появляющиеся сверху, вероятно потому, что в описании много слов с ipad, поэтому lucene считает его более актуальным.

Один трюк, который вы можете попробовать, - это использовать другое поле, в котором хранится информация о погоде, это аксессуар, который я делаю в приведенном выше примере, и включить это в качестве ИЛИ в свой поиск, например.

var booleanQuery = new BooleanQuery();
var keywordQuery = new QueryParser().Parse(keyword); // keyword = "ipad"
var isAccesoryQuery = new TermQuery(new Term("isaccesory", "False"));
booleanQuery.Add(keywordQuery, BooleanClause.Occur.MUST); 
booleanQuery.Add(isAccesoryQuery, BooleanClause.Occur.SHOULD);

vat hits = searcher.Search(booleanQuery);

Дополнительное условие натолкнет что-либо на вспомогательное: Ложно выше в разрешении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...