我正在使用带有 Groovy 的 Spring Solr。
当我尝试提高结果时遇到问题。
为了解释,考虑一个简化的在线购物域,其中索引实体是产品。
用户有一个shoppingBasket 和一个wishList,每一个都是简单的产品代码列表(即List<String>)。这两个列表首先被处理以确保它们是不同的和唯一的。
一个简单的搜索可能是在产品文本(使用 copyField 制作的复合字段,包含其描述和标题)中的关键字字符串。
要求结果列出关键字在其文本中匹配的每个产品,首先显示购物篮中的任何产品,然后是愿望清单中的任何产品,然后是任何其他产品。
遇到的问题是,虽然进行了一些提升,并从每个分组的 wishList 和 shoppingBasket 中得到结果,但 shoppingBasket 匹配并不总是显示在 wishList 匹配之前。
根据每个列表中的产品,有时会按顺序显示:
所有 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) )
看到这个类似的问题后,我注释掉了一个添加到 PageRequest 中的排序,这没有任何区别。
我还使用@Score 注释将分数包含在返回的结果中。检查这些,我可以看到 solr 对 shoppingBasket 或 wishList 中的所有匹配项给出了相同的分数。这些列表之外的所有匹配都会获得另一个较低的分数(它们之间相同)。
尝试了不同的提升值(分别为 10000.0f 和 5000.0f)无济于事。它确实产生了不同的分数,但在 shoppingBasket 或 wishList 中的所有匹配项之间仍然相同。
即使将搜索简化为仅提升标准,排序仍然存在。
任何想法,将不胜感激。