我们在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 .
1 回答
这是重写模式的一种可能方法 . 希望这会给你一些想法 .
我将假设所有产品的每个数量的价格是50以下的倍数 . 否则,您需要缩短间隔时间 .
像这样定义dynamic field,名为
price_upto_*
:然后,您可以使用以下字段索引文档:
以下是编写查询的客户端代码的方法 . 下面使用整数除法(意思是(20/50)= 0,(60/50)= 1等),
查询:如果我搜索数量20,则应显示上述结果 .
在您的客户端,您需要计算:50 *(1(20/50))= 50 *(1 0)= 50.因此您要搜索的字段是
price_upto_50
. 您的查询将像q=price_upto_50:[* TO *]
.查询:如果我搜索价格1,则应显示上述结果 .
正如您所看到的,如果每个间隔为50的价格,这可能会变得很难看 . 因此您可以使用建议的复制字段here并将所有价格字段复制到该字段中并发出如下搜索:
查询:如果我搜索价格3和数量60,则不应显示上述结果 .
(你的文件不符合 . )