1 . Function Queries

  函数查询使你可以使用一个或者多个数字字段的实际的值生成一个关联的得分(score),函数查询支持DixMax,eDisMax,标准的查询解析.

   函数查询使用函数,函数可以是常量(数字或字符文字),一个字段,另一个函数,一个替换参数的参数.也可以使用这个函数修改结果排序.

  这里有三个主要的函数查询方式:

  • 使用_val_关键字引入函数查询:
_val_:mynumericfield _val_:"recip(rord(myfield),1,2,3)"
  • 使用具有明确函数查询类型的参数,如DisMax查询解析器的bf(boost function)参数.注意bf参数实际上使用了空格分隔的函数查询列表.

    q=dismax&bf="ord(popularity)^0.5 recip(rord(price),1,1000,1000)^0.3"
  • 添加函数查询的结果作为一个文档的字段:
    &fl=sum(x, y),id,a,b,c,score

    输出结果:

...
<str name="id">foo</str>
<float name="sum(x,y)">40</float>
<float name="score">0.343</float>
...

  只有随机快速访问功能推荐使用.

1.1 abs

  描述:返回指定值或者函数的绝对值

  语法例子:abs(x)  abs(-5)

  

1.2 and

  描述:当且仅当它的两个操作都是true时,返回true

  语法例子: and("blue","sky")

1.3 constant

  描述: 指定一个浮点值常量

  语法例子: 1.5   或者 _val_:1.5

1.4 def

  描述:default的简称.返回字段的值,如果字段不存在时,返回指定的值;并且在 exists()==true的地方生成第一个值.

  语法例子: def(rating,5)  ,def(myfield, 1.0)等价于if(exists(myfield),myfield,1.0)

1.5 div

  描述:除法,div(x,y):y除以x

  语法例子: div(1,y)    div(sum(x,100),max(y,1))

1.5 dist

  描述:在n纬空间中,返回两个向量(点)之间的距离.

  语法例子:  

    dist(2, x, y, 0, 0) :计算在向量(x,y)和(0,0)之间的欧式距离(Euclidean).

    dist(1, x, y, 0, 0):计算在向量(x,y)和(0,0)之间的曼哈顿距离(Manhattan).

    dist(2, x,y,z,0,0,0):计算在向量(x,y,z)和(0,0,0)之间的欧式距离(Euclidean).

    dist(1,x,y,z,e,f,g):计算在向量(x,y,z)和(e,f,g)之间的曼哈顿距离(Manhattan).

1.6 docfreq(field,val)

  描述:返回字段中包含这个term的文档数量.这是一个常量(对于索引中所有的文档值是一样的).如果比较复杂的话,可以用引号括住,或者对term值引用替换.

  语法例子: docfreq(text,solr)   docfreq(text,'solr')  &defType=func&q=docfreq(text,$myterm)&myterm=solr    

1.7 exists

  描述:如果该字段的任何成员存在,返回true.

  语法例子: exists(author):如果字段author有值的话,返回true.   exists(query(price:5.00)):如果price中包含5.00的话,返回true

1.8 field

  描述:返回索引中数字字段(不是多值字段)的最大的值.这个语法就是使用这个字段名称本身,如果这个字段没有值,返回一个0.

  语法例子: _val_:myFloatField

1.9 hsin

  描述:Haversine(半矢量,迭加正弦波). 这个Haversine距离计算在一个范围内计算两个点之间的距离,该值必须是弧度.hsin同样带有一个Boolean参数指定是否转换他的输出到弧度.

  语法例子: hsin(2, true, x, y, 0, 0)

1.10 fl

  描述:定义了查询响应的结果中的字段.

  语法例子: fl=*,score

1.11 idf

  描述:反转文档频率;一个关于term在所有文档中是否常见或者罕见的度量.通过由含有该term的文档总数除以文档总数,然后对这个商取对数.

  语法例子: idf(list1,326.55) :

1.12 if

  描述:

    开启条件函数查询.IF(test;value1,value2):

      test:关联一个逻辑值或者表达式,返回TRUE或者FALSE.

      value1: 如果为true,返回value1.

      value2:如果为false,返回value2.

      如果value2省略,那么假定为FALSE.如果value1省略,那么假定为TRUE.表达式可以是任何输出布尔值的函数,甚至可以是输出数字值的函数,在这种情况下,值0将被解释为false.或者字符串值,空值将被解释为false.   

  语法例子: if(color=="red"; 100; if(color=="green"; 50;25))

1.13 linear

  描述:linear(x,m,c) 等价于sum(product(m,x),c).

  语法例子: linear(x,2,4)  返回 2*x+4

1.14 log

  描述:返回10的对数

  语法例子: log(x)log(sum(x,100))

1.15 map

  描述:map(x,min,max,target)  map(x,min,max,target,default)  将输入函数x列入最小最大范围到指定的目标值.最小最大参数必须是常量.这个target和default可以是常量或函数.如果x的值不在最小最大范围内,返回指定的默认值.

  语法例子: map(x,0,100,1,-1)  , map(x,0,100,sum(x,599),docfreq(text,solr)) -

1.16 max

  描述:max(x,c)返回x和c中的最大值

  语法例子: max(myfield,0)

1.17 maxdoc

  描述:返回索引中的文档数量.包含那些已经标记为删除,但是还没有被清洗的文档.这是一个常量.

  语法例子: maxdoc(list1)

1.18 ms

  描述:返回参数之间相差的毫秒数(milliseconds).参数可以是索引的TrieDateField字段名称,也可以是基于日期常量或NOW的日期数学式子.

  语法例子: 

    ms():等价于ms(NOW),从新纪元(UTC时间1970年1月1日午夜12点)到现在的毫秒数

    ms(a):从时间点a到现在的时间毫秒数

    ms(a,b):返回毫秒数(就是a-b)

    ms(NOW/DAY)
    ms(2000-01-01T00:00:00Z)
    ms(mydatefield)
    ms(NOW,mydatefield)
    ms(mydatefield,2000-01-01T00:00:00Z)
    ms(datefield1,datefield2)

1.19 norm(field)

  描述:返回索引中存储的norm(范数)信息. the product of the index time boost and the length normalization factor, according to the  Similarityfor

the field.

  语法例子: norm(text)

1.20  not

  描述: 逻辑非

  语法例子: if (NOT value1) [ ... ]:如果value1false时,NOT value1为true

1.21 numdocs

  描述:返回索引中所有文档的数量.包含被标记删除,但是还没有清除的文档.这是一个常量.

  语法例子: numdocs(list1)

1.22 or

  描述:一个逻辑或.(disjunction)

  语法例子:(value1 OR value2)

1.23 ord

  描述:通过索引字段中term的索引列表返回索引字段的顺序,字典排序通过unicode值排序.

  语法例子:

    ord(myIndexedField)
    _val_:"ord(myIndexedField)"

    如果一个字段中有三个值("apple","banana","pear"),那么排序就是ord("apple")=1ord("banana")=2ord("pear")=3

1.24 pow

  描述:幂数函数pow(x,y) 等价于 xy

  语法例子: pow(x,y)   pow(x,log(y))   pow(x,0.5) 和x的开平方根相同

1.25  product

  描述:返回多个参数之间的乘积.多个参数之间用逗号隔开.

  语法例子:product(x,y,...)  ,product(x,2),product(x,y)

1.26 query

  描述:query(subquery, default) 返回给定的子查询的评分,如果不匹配这个查询,返回默认值default.子查询的参数支持引用如$otherparam或者在本地参数中通过"v"来指定.

  语法例子:

    q=product(popularity, query({!dismax v='solr rocks'}): 返回popularity 和 query的评分的乘积.

    q=product(popularity,query($qq))&qq={!dismax}solr rocks:等价于上一个查询.

    q=product(popularity,query($qq,0.1))&qq={!dismax}solr rocks:当这个DisMax查询不匹配时,指定一个默认评分0.1.

1.27 recip

  描述:倒数.recip(myfield,m,a,b)    a/(m*x+b  其中 m,a,b都是常量,x是一个组合函数.和rord函数一起使用可以用于加权近期的文档.

  语法例子:recip(rord(creationDate),1,1000,1000)

1.28 rord

  描述:返回ord排序的反转顺序.

  语法例子:

    rord(myDateField):文档存在时间大小的一个度量,文档存在时间最小的文档返回1,最老的文档将会返回文档的总数.
    _val_:"rord(myDateField)"

1.29 scale

  描述: scale(x,minTarget,maxTarget) 落在minTarget和maxTarget之间的缩放值.

  语法例子:scale(x,1,2):x的缩放值只能在1和2之间

1.30  sqedist

  描述: 欧氏距离平方计算两个范数(欧氏距离),但是但不走平方根,从而节省了很大开销的操作.

  语法例子:sqedist(x_td, y_td, 0, 0)

1.31 sqrt

  描述:指定任何值或者函数的平方根--√ ̄.

  语法例子:sqrt(x)sqrt(100)sqrt(sum(x,100))

1.32 strdist

  描述:计算两个字符串之间的距离.使用Lucene拼写检查接口StringDistance.支持这个包下的所有实现,

strdist(string1, string2, distance measure),distance measure的可能参数有:

    jw: Jaro-Winkler
    edit: Levenstein(莱文斯坦)或者编辑距离
    ngram: The NGramDistance, if specified, can optionally pass in the ngram size too. Default is 2.
    FQN: Fully Qualified class Name for an implementation of the StringDistance interface. Must have a no-arg constructor

  语法例子:strdist("SOLR",id,edit)

1.33 sub

  描述: sub(x,y) 返回x-y

  语法例子:sub(myfield,myfield2)   sub(100,sqrt(myfield))

1.34 sum

  描述:求和,多个参数逗号隔开.

  语法例子:sum(x,y,...) sum(x,1)   sum(sqrt(x),log(y),z,0.5)

1.35 sumtotaltermfreq

  描述:返回所有条目频率的总和.

  语法例子:

    如果 doc1:(fieldX:A B C) 和 doc2:(fieldX:A A A A):
    docFreq(fieldX:A)= 2 (A appears in 2 docs) 
    freq(doc1, fieldX:A)= 4 (A appears 4 times in doc 2) 
    totalTermFreq(fieldX:A) = 5 (A appears 5 times across all docs)
    sumTotalTermFreq(fieldX)= 7 in  , there are 5 As, 1 B, 1 C

1.36 termfreq

  描述:返回一个文档的字段中term的出现频率

  语法例子:termfreq(text,'memory')

1.37 tf

  描述:term频率.Similarity中使用到这个因素.

  语法例子:tf(text,'solr')

1.38 top

  描述:

  语法例子:

1.39 Totaltermfreq

  描述:整个索引中,指定字段下的指定term的总数量.

  语法例子:

1.40 xor()

  描述:Logical exclusive disjunction,一个或者其他的,但是不能两者都包括.

  语法例子:xor(field1,field2)返回true,如果field1或者field2为true.如果都为true的话,返回false.

为了更好的理解函数是如何在solr中使用的,我们举出了以下的例子

  1.假设在字段boxname中存储了一些箱子的尺寸:x,y,z.假设你想搜索匹配名字findbox的箱子,并且通过箱子的体积排序,那么查询可能是:

    q=boxname:findbox_val_:"product(product(x,y),z)

  2.假设还有一个字段存储箱子的重量:weight,按照箱子的密度排序,并在评分中返回箱子的密度的值:

    http://localhost:8983/solr/select/?q=boxname:findbox_val_div(weight,product(product(x,y),z))"&fl=boxname x y z weight score

  3.查询结果通过距离排序:

    http://localhost:8983/solr/select?q=*:*&sort=dist(2, point1, point2) desc

  4.&fl=id,sum(x, y),score 的返回结果:

<str name="id">foo</str>
<float name="sum(x,y)"></float>
<float name="score">0.343</float>

1.7.4.1 Function Queries-函数查询的更多相关文章

  1. Solr学习总结(六)solr的函数查询Function Queries

    摘要: 函数查询允许你使用一个或多个数字字段的真实值生成一个相关性分数,函数查询在standard,DisMax,eDisMax下都能使用. 查询函数可以是常量,字段或者其他函数的组合.使用函数可以影 ...

  2. 函数查询(Function Query)

    函数查询 可以利用 numeric字段的值 或者 与字段相关的的某个特定的值的函数,来对文档进行评分. 1.    使用函数查询的方法 这里主要有三种方法可以使用函数查询,这三种s方法都是通过solr ...

  3. hive中function函数查询

    1. desc function [函数名] desc function xpath; 查询用法: 2. desc function extended [函数名] desc function exte ...

  4. Solr的函数查询(FunctionQuery)

    作用 通过函数查询让我们可以利用 numeric域的值或者与域相关的的某个特定的值的函数,来对文档进行评分. 如何使用 这里主要有两种方法可以使用函数查询,这两种方法都是通过solr http 接口的 ...

  5. Solr之functionQuery(函数查询)

    Solr函数查询 让我们可以利用 numeric域的值 或者 与域相关的的某个特定的值的函数,来对文档进行评分. 怎样使用函数查询 这里主要有两种方法可以使用函数查询,这两种方法都是通过solr ht ...

  6. solr之functionQuery(函数查询)【转】

    函数查询 让我们可以利用 numeric域的值 或者 与域相关的的某个特定的值的函数,来对文档进行评分. 怎样使用函数查询 这里主要有两种方法可以使用函数查询,这两种方法都是通过solr http 接 ...

  7. function foo(){}、(function(){})、(function(){}())等函数区别分析

    前面一段时间,看到(function(){}),(function(){}())这些函数就犯晕,不知道它到底是什么意思,为什么函数外要加小括号,函数后要加小括号,加和不加到底有什么区别……一直犯迷糊, ...

  8. js function定义函数的4种方法

    js function定义函数的4种方法 1.最基本的作为一个本本分分的函数声明使用. 复制代码代码如下: 复制代码代码如下: function func(){} 或 var func=functio ...

  9. c++ virturn function -- 虚函数

    c++ virturn function -- 虚函数 pure irtual function  -- 纯虚函数   先看例子 #include <iostream> using nam ...

随机推荐

  1. deque 居然已经实现了 insert 接口

    最近有个开发需求,根据server传递来的广告位来展示某条广告. 但最终存储广告的数据结构是deque,里面存储的东西还是对象(stl 基于拷贝语义). 想了半天,在开头和结尾插入比较方便,在中间插入 ...

  2. Linux下的设置静态IP命令详解

    网络配置的配置文件在/etc/sysconfig/network-scripts/下,文件名前缀为ifcfg-后面跟的就是网卡的名称,可以通过双TAB键查看然后编辑,也可以使用ifconfig查看,也 ...

  3. ext 参考资料

    http://extjs.org.cn/ 中文网站 http://www.sencha.com/ 英文网站 http://www.qeefee.com 个人总结

  4. Bash's ArithmeticExpression

    [Bash's ArithmeticExpression] let command: let a=17+23 echo "a = $a" # Prints a = 40 let a ...

  5. Java反射机制(取得类的结构)

    通过反射得到一个类中的完整的结构,就要使用java.lang.reflect包中的以下几个类:   Constructor:表示类中的构造方法 Field:表示类中的属性 Method:表示类中的方法 ...

  6. Java环境搭建及语言基础

    JRE和JDK JRE:Java Runtime Environment,java运行环境. JDK:Java Development Kit,java开发工具包. 使用JDK开发java程序,交给J ...

  7. [原创]mac终端前面的计算机名怎么改??

    1.修改-之前的名称 mac环境,系统 OS X Yisemite,打开终端, 执行下面命令“Tmp”是你想要改的电脑名称 sudo scutil --set HostName Tmp 执行前,执行后 ...

  8. halcon,C# 学习

    Halcon学习之一:查询图像参数 1.get_grayval ( Image : : Row, Column : Grayval ) 计算Image图像中坐标为(Row,Column)的点的灰度值G ...

  9. VM VirtualBox 上安装 CentOs6.4(详细)

    在网上下载:CentOS-6.4-i386-bin-DVD1.iso镜像. 这是我在VBox上安装CentOs6.4的过程: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12 ...

  10. android 48dp美化

    48dp