2012-04-15 70 views
2

我想提高它們的inStock文件:true和高價格,在某種程度上:Solr的:如何在布爾字段映射爲1和2,提高

  • 的inStock:真正爲1
  • 的inStock:假是2

所以,我可以用生產價格和使用inStock數字表示爲提升功能:

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

這可能嗎?已經有一個question about boolean field boosting,但它不符合我的要求。

UPDATE1

SOLR-2136 Solr中4實行的是有條件的功能(如果),這使得我的情況很容易。由於Solr 4尚未發佈,是否有任何解決方法?

UPDATE2: 儘量不要在Solr中使用布爾型字段類型。它將「T」存儲爲true,將「F」存儲爲false,並且需要使用map()和ord()以便將true映射爲1,將false映射爲0.只需將int用於布爾值即可,在您的布爾字段中允許爲null,請勿爲您的字段索引錯誤值。

回答

1

呀有解決方法:

使用ord() function它將返回基於一組索引字段值的序號。

這意味着如果您僅索引您的inStock字段的「真實」值(並將假值從索引中刪除),則可以確保inStock字段中只有一個值,這意味着此值將會索引位置爲1,orStock(inStock)將爲所有inStock == true的文檔返回1。另一方面,如果inStock字段在文檔中不可用,則ord()將返回0。

如果您現在想映射到true = 1和false = 2,您可以另外使用map函數來更改數字。

+0

我在inStock中索引了true和false;此外,索爾的辭典順序ord(true)= 2,ord(false)= 1,這正是我想要的。 – Mohsen 2012-04-18 06:49:45

+1

@Mohsen好吧,完美。但要確保你總是至少有一件iStock = false,否則你的真實成爲'1'! – Omnaest 2012-04-18 19:18:07