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

非常感谢!

4

1 回答 1

0

布尔值可能不是 0 和 1。您可以使用 if() 函数基于此选择值。

这个表达式:

if(listing_premium,1,0) 

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

于 2012-05-29T05:47:49.807 回答