摘要: 函数查询允许你使用一个或多个数字字段的真实值生成一个相关性分数,函数查询在standard,DisMax,eDisMax下都能使用。
查询函数可以是常量,字段或者其他函数的组合。使用函数可以影响结果的排序。本文整理自Solr官方文档:https://lucene.apache.org/solr/guide/6_6/function-queries.html

使用Function Query

1.直接向QParser指定函数参数,如func或frange:

q={!func}div{popularity,price}&fq={!frange l=1000}cus

tomer_ratings

2.在排序时使用:

sort=div(popularity,price)desc,score desc

3.在查询结果中预处理一些输出字段

&fl=sum(x,y),id,a,b,c,score

4.指定函数的一个参数:在dDisMax中指定boost参数,在DisMax中指定bf参数

q=dismax&bf=”ord(popularity)^0.5 recip(rord(price),1,1000,1000)^0.3”

5.在Lucene的QParser中使用_val_关键字指定函数:

q=_val_:mynumericfield _val_:”recip(rord(myfield),1,2,3)”

Solr中的可用函数

函数 说明 举例
abs(x) 返回绝对值 abs(-5)
“constant” 指定一个浮点数 1.5
def(“field”,value) 默认值,当指定字段不存在时,返回默认值 def(rationg,5)
div(x,y) 除法,x除以y div(1,5)
dist 计算两点之间的距离 dis(2,x,y,0,0)
docfreq(field,val) 返回某值在某字段出现的次数 docfreq(title,’solr’)
field(“field”) 返回该field的索引数量 field(‘title’)
hsin 曲面圆弧上两点之间的距离 hsin(2,true,x,y,0,0)
idf Inverse document frequency 倒排文档频率 idf(“field”,’solr’)
if if(test,value1,value2) if(termfreq(title,’solr’),popularity,42)
linear(x,m,c) 就是m*x+c,等同于sum(product(m,x),c) linear(1,2,4)=1x2+4=6
log(x) 以10为底,x的对数 log(sum(x,100))
map(x,min,max,target) 如果x在min和max之间,x=target,否则x=x map(x,0,0,1)
max(x,y,…) 返回最大值 max(2,3,0)
maxdoc 返回索引的个数,查看有多少文档,包括被标记为删除状态的文档 maxdoc()
min(x,y,…) 返回最小值 min(2,4,0)
ms 返回两个参数间毫秒级的差别 ms(datefield1,2000-01-01T00:00:00Z)
norm(field) 返回该字段索引值的范数 norm(title)
numdocs 返回索引的个数,查看有多少文档,不包括被标记为删除状态的文档 numdocs()
ord 根据顺序索引发货结果 ord(title)
pow(x,y) 返回x的y次方 pow(x,log(y))
product(x,y) 返回多个值得乘积 product(x,2)
query 返回给定的子查询的得分,或者文档不匹配的默认值值 query(subquery,default)
recip(x,m,a,b) 相当于a/(m*x+b),a,m,b是常量,x是变量 recip(myfield,m,a,b)
rord 按ord的结果反序返回  
scale 返回一个在最大值和最小值之间的值 scale(x,1,3)
sqedist 平方欧氏距离计算 sqedist(x_td,y_td,0,0)
sqrt 返回指定值得平方根 sqrt(x)sqrt(100)
strdist 计算两个字符串之间的距离 strdist(“SOLR”,id,edit)
sub 返回x-y sub(field1,field2)
sum(x,y) 返回指定值的和 sum(x,y,…)
sumtotaltermfreq 返回所有totaltermfreq的和  
termfreq 词出现的次数 termfreq(title,’sorl’)
tf 词频 tf(text,’solr’)
top 功能类似于ord  
totaltermfreq 返回这个词在该字段出现的次数 ttf(title,’memory’)
and 返回true值当且仅当它的所有操作为true and(not(exists(popularity)),exists(price))
or 返回true值当有一个操作为true or(value1,value2)
xor 返回false值如果所有操作都为真 xor(field1,field2)
not 排除操作 not(exists(title))
exists 如果字段存在返回真 exists(title)
gt,gte,lt,lte,eq 比较函数 2 gt 1

Solr学习总结(六)solr的函数查询Function Queries的更多相关文章

  1. Solr学习笔记---部署Solr到Tomcat上,可视化界面的介绍和使用,Solr的基本内容介绍,SolrJ的使用

    学习Solr前需要有Lucene的基础 Lucene的一些简单用法:https://www.cnblogs.com/dddyyy/p/9842760.html 1.部署Solr到Tomcat(Wind ...

  2. Solr学习之二-Solr基础知识

    一 基本说明 简单来说Solr是基于Lucene的高性能的,开源的Java企业搜索服务器.Solr可以看作一个Web app,运行在tomcat或Jetty这类HTTP服务器上, 底层是一个基于Luc ...

  3. Solr学习笔记(1) —— Solr概述&Solr的安装

    一.概述 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字.分类.价格搜索商品信息,也可以根据价格进行排序. 1.1 实现方法 在一些大型门户网站.电子商务网站等都需要站内搜索功能,使用传统 ...

  4. solr学习(六):使用自定义int/long类型主键

    需求分析: 我不想使用solr默认的主键id,我想换成其他的,比如我的文章id为article_id,我想让article_id作为主键. 而且,我的主键是int类型,而solr的主键默认是strin ...

  5. Solr学习01:Solr基础知识

    一.什么是solr 首先,要了解下Solr是什么,以下是官方的描述. Solr是一个来自Apache Lucence项目,是一个热门开源的企业级搜索平台.为目前世界上相当多的大型互联网站点提供搜索和导 ...

  6. Solr学习笔记(2) —— Solr管理索引库

    一.维护索引 1.1 添加/更新文档 1.2 批量导入数据(使用dataimport) 第一步:把mysql的数据驱动.以及dataimport插件依赖的jar包添加到solrcore(collect ...

  7. Oracle学习笔记六 SQL常用函数

    函数的分类 Oracle 提供一系列用于执行特定操作的函数 SQL 函数带有一个或多个参数并返回一个值 以下是SQL函数的分类:

  8. docker学习(六) Docker命令查询

    Docker命令查询 1.基本语法docker [OPTIONS] COMMAND [arg...]一般来说,Docker 命令可以用来管理 daemon,或者通过 CLI 命令管理镜像和容器.可以通 ...

  9. Solr学习总结(六)SolrNet的高级用法(复杂查询,分页,高亮,Facet查询)

    上一篇,讲到了SolrNet的基本用法及CURD,这个算是SolrNet 的入门知识介绍吧,昨天写完之后,有朋友评论说,这些感觉都被写烂了.没错,这些基本的用法,在网上百度,资料肯定一大堆,有一些写的 ...

随机推荐

  1. STM32 外部中断

    1)STM32一般有19 个外部中断为: 线 0~15:对应外部 IO 口的输入中断.线 16:连接到 PVD 输出. 线 17:连接到 RTC 闹钟事件. 线 18:连接到 USB 唤醒事件. 2) ...

  2. ZOJ - 3216:Compositions (DP&矩阵乘法&快速幂)

    We consider problems concerning the number of ways in which a number can be written as a sum. If the ...

  3. Luogu 3246 序列

    Luogu 3246 序列 考虑莫队,不算特别优秀,但足以通过此题. 用莫队做,先考虑在当前区间右边加入一个数对答案的影响,其他三种情况同理. 若加入新数的区间为 \([L,R]\) ,那么加的贡献就 ...

  4. 线上服务内存OOM问题定位[转自58沈剑]

    相信大家都有感触,线上服务内存OOM的问题,是最难定位的问题,不过归根结底,最常见的原因: 本身资源不够 申请的太多 资源耗尽 58到家架构部,运维部,58速运技术部联合进行了一次线上服务内存OOM问 ...

  5. C# 使用ZXing.NET生成一维码、二维码

    以上图片是本示例中的实际运行效果,在生活中我们的一维码(也就是条形码).二维码 使用已经非常广泛,那么如何使用c#.net来进行生成一维码(条形码).二维码呢? 使用ZXing来生成是非常方便的选择, ...

  6. SysRq魔法键的使用

    SysRq魔法键的使用 1.SysRq简介它能够在系统处于极端环境时响应按键并完成相应的处理.这在大多数时候有用.SysRq 经常被称为 Magic System Request,它被定义为一系列按键 ...

  7. PostgREST docker-compose 试用

    PostgREST 是一款很不错的直接将pg 数据库暴露为restapi ,使用了基于行级别安全访问控制, 比较全的restapi 查询以及集成了swagger openapi docker-comp ...

  8. vulcanjs 核心架构概念

    基于包的架构 为了保证系统的灵活以及可扩展,vulcanjs 使用基于包的架构设计,每一个功能都是一个包,可以方便的添加,移除 扩展.而不是修改 vulcan 的设计哲学是进行系统扩展,而不是编辑修改 ...

  9. smarty学习——高级知识

    1.Objects 对象 smarty允许通过模板访问PHP对象.有两种方式来访问它们.一种是注册对象到模板,然后通过类似于用户自定义函数的形式来访问它. 另一种方法给模板分配对象,然后通过访问其它赋 ...

  10. md5,base64,rsa

    MD5功能:    输入任意长度的信息,经过处理,输出为128位的信息(数字指纹):    不同的输入得到的不同的结果(唯一性):    根据128位的输出结果不可能反推出输入的信息(不可逆): 1. ...