首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Solr boosting问题

Spring Solr boosting问题
EN

Stack Overflow用户
提问于 2016-08-12 17:32:38
回答 1查看 143关注 0票数 0

我在Groovy中使用Spring Solr。

当我试图提高结果时,我有一个问题。

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

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

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

要求结果列出每个产品,其中关键字在其文本中与shoppingBasket中的任何关键字匹配,首先显示,然后列出wishList中的任何关键字,最后列出任何其他关键字。

所遇到的问题是,尽管正在进行一些提升并且来自wishList和shoppingBasket的结果被分组,但shoppingBasket匹配并不总是显示在wishList匹配之前。

根据每个列表中的产品,它有时会按以下顺序显示:

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

而不是预期的:

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

升压是使用以下标准应用的:

代码语言:javascript
复制
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注释将分数包含在返回的结果中。检查这些,我可以看到,无论是shoppingBasket还是wishList中的所有匹配,solr都会给出相同的分数。这些列表之外的所有匹配都会得到另一个较低的分数(它们之间相同)。

我已经尝试了不同的boosts值(分别为10000.0f和5000.0f ),但都没有效果。它确实产生了不同的分数,但在shoppingBasket或wishList的所有比赛中,它仍然是相同的。

即使将搜索简化到仅仅是提升标准,排序仍然是不正确的。

任何想法都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2016-08-25 00:06:12

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

代码语言:javascript
复制
boostingShoppingBasket = new Criteria('productCode_s').in(shoppingBasket).boost(10.0f).connect()
boostingWishList = new Criteria('productCode_s').in(wishList).boost(2.0f).connect()

然后或者把这些放在一起。

如果还需要应用其他搜索条件(例如,产品描述包含某些文本),则在使用connect进行包装之前,必须使用boosting条件进行ANDed,这样在更复杂的情况下,我将以以下方式结束(假设createSearchCriteria(searchCommand)方法返回基本的搜索条件):

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38914624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档