【问题标题】:Spring Solr boosting issueSpring Solr 提升问题
【发布时间】:2016-08-12 09:32:38
【问题描述】:

我正在使用带有 Groovy 的 Spring Solr。

当我尝试提升结果时遇到问题。

为了解释,考虑一个简化的在线购物域,其中索引实体是 Product。

用户有一个 shoppingBasket 和一个 wishList,每个都是简单的产品代码列表(即 List)。这两个列表首先被处理以确保它们是不同的和唯一的。

一个简单的搜索可能是在产品文本(使用 copyField 制作的复合字段,包含其描述和标题)中的关键字字符串。

要求结果列出关键字在其文本中匹配的每个产品,首先显示购物篮中的任何产品,然后是愿望清单中的任何产品,然后是任何其他产品。

遇到的问题是,虽然进行了一些提升,并从每个分组的 wishList 和 shoppingBasket 中得到结果,但 shoppingBasket 匹配并不总是显示在 wishList 匹配之前。

根据每个List中的产品,有时会按顺序显示:

所有wishList匹配,所有shoppingBasket匹配,所有其他匹配

而不是预期的:

所有 shoppingBasket 匹配、所有 wishList 匹配、所有其他匹配

使用以下标准应用提升:

boostingCriteria = new Criteria('productCode_s').in(shoppingBasket).boost(2.0f)
boostingCriteria = boostingCriteria.or(
      new Criteria('productCode_s').in(wishList).boost(1.0f) )

看到这个similar issue 我注释掉了一个添加到 PageRequest 中的排序,这没有任何区别。

我还使用@Score 注释将分数包含在返回的结果中。检查这些,我可以看到 solr 对 shoppingBasket 或 wishList 中的所有匹配项给出了相同的分数。这些列表之外的所有匹配项都会获得另一个较低的分数(它们之间相同)。

尝试了不同的提升值(分别为 10000.0f 和 5000.0f)但无济于事。它确实产生了不同的分数,但在 shoppingBasket 或 wishList 中的所有匹配项之间仍然相同。

即使将搜索简化为仅提升标准,排序仍然存在。

任何想法都将不胜感激。

【问题讨论】:

    标签: java spring groovy solr solr-boost


    【解决方案1】:

    通过反复试验,我发现解决方案是使用 .connect() 方法,如下所示。

    boostingShoppingBasket = new Criteria('productCode_s').in(shoppingBasket).boost(10.0f).connect()
    boostingWishList = new Criteria('productCode_s').in(wishList).boost(2.0f).connect()
    

    然后将它们组合在一起。

    如果还有其他搜索条件也适用(例如产品描述包含某些文本),则必须在使用连接包装之前将这些条件与提升条件进行“与”运算,这样在更复杂的情况下,我会结束加上以下内容(假设 createSearchCriteria(searchCommand) 方法返回基本搜索条件):

    boostingShoppingBasket = new Criteria('productCode_s').in(shoppingBasket).boost(10.0f)
    boostingShoppingBasket = boostingShoppingBasket.and(createSearchCriteria(searchCommand)).connect()
    
    boostingWishList = new Criteria('productCode_s').in(wishList).boost(2.0f)
    boostingWishList = boostingWishList.and(createSearchCriteria(searchCommand)).connect()
    
    Criteria criteria = createSearchCriteria(searchCommand)
       .or(boostingShoppingBasket).or(boostingWishList)
    

    【讨论】:

      猜你喜欢
      • 2021-11-26
      • 1970-01-01
      • 2019-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多