2

我想以以下方式提升 inStock:true 且价格高的文档:

  • inStock:true 为 1
  • inStock:false 为 2

这样我就可以使用 price 和 inStock 数字表示的生成作为 boost 函数:

document boost = (inStock == true ? 2 : 1) * price

这可能吗?已经有一个关于 boolean field boosting的问题,但它不符合我的要求。

更新1

Solr 4 中实现的SOLR-2136用于条件函数 (if),这使我的案例变得简单。由于 Solr 4 尚未发布,是否有任何解决方法?

UPDATE2:尽量不要在 Solr 中使用布尔字段类型。它存储 'T' 为真,'F' 为假,您需要使用 map() 和 ord() 以便将 true 映射为 1,将 false 映射为 0。只需将 int 用于布尔值,如果你不这样做' t 在布尔字段中允许 null,不要为您的字段索引错误值。

4

1 回答 1

1

是的,有一个解决方法:

使用ord() 函数,它将基于一组索引字段值返回一个序数。

这意味着,如果您只为 inStock 字段的“真”值编制索引(并将假值排除在索引之外),则可以确保 inStock 字段只有一个值,这意味着该值将具有索引位置1 并且 ord(inStock) 将为所有具有 inStock==true 的文档返回 1。另一方面,如果 inStock 字段在文档中不可用,ord() 将返回 0。

如果您现在想映射到 true=1 和 false=2,您还可以使用map函数来更改数字。

于 2012-04-15T19:09:48.467 回答