lucene(17)—lucene搜索之expressions表达式处理
有时候我们在做lucene的结果展示的时候可能需要对多个列的内容进行计算,根据多个field对应的值做数值方面的运算。
lucene自4.6版本起,提供了用于运算的expression模块;
expression分为两部分:
org.apache.lucene.expressions:提供了字段绑定和相关的表达式参数传递的功能;
org.apache.lucene.expressions.js:提供了表达式定义的功能。
Expression类使用示例
Expression是提供document的运算的支持类;
我们的运算表达式和其绑定内容通常类似于如下:
|
|
如上所示,我们对document中的_score和popularity两个字段进行值的运算,这里是对_score开平方之后和popularity的对数运算求和,运算方式的定义在第一行;
下边有定义了SimpleBindings,binding主要是对运算的数据进行数据绑定;
最终的查询结果是根据以上的运算结果采取倒排序的方式表达式说明表达式的构造可以采用如下的几种来进行组合:
数值型的
- 加减乘除取模(+-*/%)等运算符
- 移位运算符:| & ^ ~ << >> >>>
- 布尔运算符(包括三目运算符): && || ! ?:
- 比较运算符:< <= == >= >
- 数学运算函数:abs ceil exp floor ln log10 logn max min sqrt pow
- 三角运算函数:acosh acos asinh asin atanh atan atan2 cosh cos sinh sin tanh tan
- haversin公式
- min,max函数
代码示例:
我写了一个测试程序,模拟长方形的运算并排序;
面积倒序排序;当面积相同时,按宽度倒序,长度倒序;
周长倒序排序;周长相同时,按宽度倒序,长度倒序;
示例程序如下:
|
|
面积的比较运行结果为:
|
|
同样的,周长比较的运行结果为:
|
|
以上是lucene的expression的应用,源代码下载地址: