通过自定义函数查询进行Solr排序

时间:2014-05-09 15:17:10

标签: java solr

我遇到了使用Solr 3.6.2开发自定义函数查询的一些问题。 我的目标是能够实现自定义排序技术。

我有一个名为daily_prices_str的字段,它是单个值str。

示例:

<str name="daily_prices_str">
2014-05-01:130 2014-05-02:130 2014-05-03:130 2014-05-04:130 2014-05-05:130 2014-05-06:130 2014-05-07:130 2014-05-08:130 2014-05-09:130 2014-05-10:130 2014-05-11:130 2014-05-12:130 2014-05-13:130 2014-05-14:130 2014-05-15:130 2014-05-16:130 2014-05-17:130 2014-05-18:130 2014-05-19:130 2014-05-20:130 2014-05-21:130 2014-05-22:130 2014-05-23:130 2014-05-24:130 2014-05-25:130 2014-05-26:130 2014-05-27:130 2014-05-28:130 2014-05-29:130 2014-05-30:130 2014-05-31:130 2014-06-01:130 2014-06-02:130 2014-06-03:130 2014-06-04:130 2014-06-05:130 2014-06-06:130 2014-06-07:130 2014-06-08:130 2014-06-09:130 2014-06-10:130 2014-06-11:130 2014-06-12:130 2014-06-13:130 2014-06-14:130 2014-06-15:130 2014-06-16:130 2014-06-17:130 2014-06-18:130 2014-06-19:130 2014-06-20:130 2014-06-21:130 2014-06-22:130 2014-06-23:130 2014-06-24:130 2014-06-25:130 2014-06-26:130 2014-06-27:130 2014-06-28:130 2014-06-29:130 2014-06-30:130 2014-07-01:130 2014-07-02:130 2014-07-03:130 2014-07-04:130 2014-07-05:130 2014-07-06:130 2014-07-07:130 2014-07-08:130 2014-07-09:130 2014-07-10:130 2014-07-11:130 2014-07-12:130 2014-07-13:130 2014-07-14:130 2014-07-15:130 2014-07-16:130 2014-07-17:130 2014-07-18:130 2014-07-19:170 2014-07-20:170 2014-07-21:170 2014-07-22:170 2014-07-23:170 2014-07-24:170 2014-07-25:170 2014-07-26:170 2014-07-27:170 2014-07-28:170 2014-07-29:170 2014-07-30:170 2014-07-31:170 2014-08-01:170 2014-08-02:170 2014-08-03:170 2014-08-04:170 2014-08-05:170 2014-08-06:170 2014-08-07:170 2014-08-08:170 2014-08-09:170 2014-08-10:170 2014-08-11:170 2014-08-12:170 2014-08-13:170 2014-08-14:170 2014-08-15:170 2014-08-16:170 2014-08-17:170 2014-08-18:170 2014-08-19:170 2014-08-20:170 2014-08-21:170 2014-08-22:170 2014-08-23:170 2014-08-24:170 2014-08-25:170 2014-08-26:170 2014-08-27:170 2014-08-28:170 2014-08-29:170 2014-08-30:170
</str>

正如您所看到的,字符串的结构是date:price。

基本上,我想解析字符串以获取特定时期的价格并按该价格排序。 我已经开发了自定义函数查询的java插件,我正处于我的代码编译,运行,执行等的地步.Solr对我的代码很满意。

示例:

price(daily_prices_str,2015-01-01,2015-01-03)

如果我运行此查询,我可以在分数字段中看到正确的价格:

/select?price=price(daily_prices_str,2015-01-01,2015-01-03)&q={!func}$price

其中一个问题是我无法按功能结果排序。 如果我运行此查询:

/select?price=price(daily_prices_str,2015-01-01,2015-01-03)&q={!func}$price&sort=$price+asc

我得到404说&#34; 排序参数无法被解析为查询,并且不是索引中存在的字段:$ price &#34; 但它适用于解决方法:

/select?price=sum(0,price(daily_prices_str,2015-01-01,2015-01-03))&q={!func}$price&sort=$price+asc

主要问题是我无法按范围过滤:

/select?price=sum(0,price(daily_prices_str,2015-1-1,2015-1-3))&q={!frange l=100 u=400}$price

也许我完全错误地解决了这个问题?

1 个答案:

答案 0 :(得分:0)

而不是传递新创建的&#34;价格&#34;到&#34;排序&#34;参数,你可以像这样传递数据本身吗?

q=*:*&sort=price(daily_prices_str,2015-01-01,2015-01-03) ...