0

我们有许多带有“ipad”字样的产品,其中包括 iPad 桌子和 iPad 配件。当我们使用 Lucene 搜索“ipad”这个词时,所有配件都显示在顶部,iPad 显示在第 25 页。我们希望将 iPad 平板电脑带到首页。我们只是在索引产品的名称,我们在索引时将 boost 3 设置为 ipad 平板电脑的名称。我们仍然没有让 iPad 进入第一页。以下是其中一些产品。非常感谢任何帮助。

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

1 回答 1

4

我认为您正在按领域进行提升,如果它是 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);

额外的条件将与 isaccesory 碰撞任何东西: False 相关性更高。

于 2012-03-04T13:19:42.590 回答