在Lucene.NET中使用boost将相关结果推到首位



我们有很多带有"ipad"字样的产品,其中包括ipad桌子和ipad配件。当我们用Lucene的单词"ipad"搜索时,所有配件都会显示在顶部,ipad会显示在第25页。我们想把iPad平板电脑带到第一页。我们只是在对产品名称进行索引,并在索引时将boost 3设置为ipad平板电脑的名称。尽管如此,我们还是没有让iPad进入第一页。以下是其中的一些产品。非常感谢您的帮助。

  1. 苹果iPad(第一代)MC496LL/A平板电脑(32GB,Wifi+3G)
  2. 苹果iPad2 MC769LL/A平板电脑(16GB,Wifi,黑色)最新型号
  3. 苹果Ipad2(Ipad2)平板电脑64GB Wifi仅黑色
  4. 苹果iPad2 MC764LL/A平板电脑(64GB,Wifi+Verizon 3G,黑色)最新型号
  5. iHome iPad充电站
  6. 适用于iPad的Marware Eco Vue
  7. iLuv iPad氯丁橡胶护套

我认为你是在按字段提升你需要做的提升整个文档,如果是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认为它更相关。

你可以尝试的一个技巧是使用另一个字段来存储天气——这是我在上面的例子中做的一个附件,并将其作为OR包含在你的搜索中。例如

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);

额外的条件会使任何符合条件的事情发生变化:相关性越高,则错误越大。

最新更新