我们在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"
]
}
案例我需要关注
还有一件事:如何管理那些price_per_quant字段的方面搜索?
我正在使用 Solarium-project php 库来连接solr。
答案 0 :(得分:2)
以下是重写架构的一种可能方法。希望这会给你一些想法。
我将假设所有产品的每个数量的价格是50以下的倍数。否则,您需要缩短间隔时间。
定义一个名为price_upto_*
的{{3}},如下所示:
<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的价格,这可能会变得很难看。因此,您可以使用建议dynamic field的复制字段,并将所有价格字段复制到该字段中并发出搜索结果像:
q=price_upto_static:1
查询:如果我搜索价格3和数量60,则不应显示上述结果。
q=price_upto_100:3
(您的文档不符合。)