【问题标题】:How to convert a boolean to an integer in SOLR?如何在 SOLR 中将布尔值转换为整数?
【发布时间】:2012-06-03 02:06:15
【问题描述】:

我拥有一个包含列表的商店,其中一些是高级会员。我正在尝试在搜索结果顶部 25 公里范围内获取高级会员,其余列表按最近附近排序。

为了表明列表是优质的,我定义了布尔字段 listing_premium。

<field name="listing_premium" type="boolean" indexed="true" stored="true" />

如果我可以通过将距离映射到查询 (listing_location) 并将其乘以表示布尔值的整数 (true = 1, false = 0) 在排序子句中使用此布尔值,那将很容易

因为 listing_premium 是一个布尔值,所以以下内容不起作用...

&sort=mul(map(geodist(listing_location),0.0001,25,1,0),listing_premium)+desc,geodist(listing_location) asc

我的问题是:

  • 我能否以某种方式将 listing_premium 映射到 0 或 1
  • 或者我可以在排序中包含 if 语句
  • 或者我可以在架构中使用 copyField 来创建一个生成的字段,将 listing_premium 转换为 listing_premium_int

非常感谢!

【问题讨论】:

  • 我不熟悉这个系统,但你不能简单地说listing_premium ? 1 : 0之类的吗?
  • 布伦丹 - 你是对的。我已经纠正了这种情况:)

标签: java sorting solr lucene schema


【解决方案1】:

布尔值可能不是 0 和 1。您可以使用 if() 函数来根据它选择值。

这个表达式:

if(listing_premium,1,0) 

如果 listing_premium 为真则返回 1,如果为假则返回 0。

【讨论】:

  • 我也试过了,但我不能让它在排序中工作:&sort=mul(map(geodist(listing_location),0.0001,25,1,0),if(listing_premium, 1,0)) 异常:无法确定排序顺序:'mul(map(geodist(listing_location),1,25,1,0),if(listing_premium,1,0)) desc 你有一个例子排序中的 if 语句?
  • 对不起,我在 edismax 的 boost 参数中做了这种事情,但没有排序。您可能想尝试提升,将您的分数与相关性分数混合在一起。
猜你喜欢
  • 1970-01-01
  • 2016-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 2012-02-25
相关资源
最近更新 更多