如何在SOLR中将布尔值转换为整数?

3

我维护一个包含列表的商店,其中一些是高级会员。 我正在尝试在搜索结果顶部获取范围内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 这样的代码吗? - AardvarkSoup
Brendan - 你说得对。我已经纠正了这个问题 :) - javacoder
1个回答

0

布尔值的取值可能不仅限于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 语句的示例吗? - javacoder
抱歉,我在edismax的boost参数中做过这种事情,但没有在sort中。您可能想尝试使用boost,它将您的分数与相关性分数混合。 - Walter Underwood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接