0

我们在 solr 搜索引擎中以以下格式存储产品实体的数据。

{

id:unique_id,

...

...

...

price_per_quant: [
   "1-50|1",/* here price per quantity is save in key value pari e.g for quantity 1 to 50 price should be 1*/
   "51-100|2",
   "101-150|3",
   "151-200|4"
]


}

我需要关注的案例

  • 如果我搜索数量 20,则应显示以上结果。
  • 如果我搜索价格 1,则应显示上述结果。
  • 如果我搜索价格 3 和数量 60,则不应显示上述结果。

还有一件事:我如何管理那些 price_per_quant 字段的方面搜索?

我正在使用Solarium-project php库来连接 solr。

4

1 回答 1

1

这是一种重新设计架构的可能方法。希望这能给你一些想法。

我将假设您所有产品的单位数量价格是以下 50 的倍数。否则,您将需要减少间隔。

定义一个动态字段price_upto_*,如下所示:

<dynamicField name="price_upto_*" type="integer" indexed="true" stored="true"/>

然后,您可以使用以下字段为您的文档编制索引:

price_upto_50: 1,
price_upto_100: 2,
price_upto_150: 3,
price_upto_200: 4

以下是您为查询编写客户端代码的方法。下面使用整数除法(意思是(20/50)= 0,(60/50)= 1等,)

查询:如果我搜索数量 20,则应显示以上结果。

在您的客户端中,您需要计算:50 * (1 + (20/50)) = 50 * (1 + 0) = 50。所以您要搜索的字段是price_upto_50. 您的查询将像q=price_upto_50:[* TO *].

查询:如果我搜索价格 1,则应显示上述结果。

q=price_upto_50:1 OR price_upto_100:1 OR price_upto_150:1 OR price_upto_200:1

如您所见,如果您有每个 50 间隔的价格,这可能会变得很难看。因此,您可以使用此处建议的复制字段,并将所有价格字段复制到该字段中并发出如下搜索:

q=price_upto_static:1

查询:如果我搜索价格 3 和数量 60,则不应显示上述结果。

q=price_upto_100:3

(您的文档不匹配。)

于 2014-03-22T00:51:26.210 回答