摘要: 函数查询允许你使用一个或多个数字字段的真实值生成一个相关性分数,函数查询在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. exit和return

    函数名: exit() 所在头文件:stdlib.h(如果是”VC6.0“的话头文件为:windows.h) 功 能: 关闭所有文件,终止正在执行的进程. exit(1)表示异常退出.这个1是返回给操 ...

  2. error: QXcbConnection: Could not connect to display

    /********************************************************************************* * error: QXcbConn ...

  3. android中传统的创建数据库

    1.在Android工程中建立一个class类,且继承与SQLiteOpenHelper. 2.然后到Mainactivity中去new一个MyOpenHelper来找到它 3.第一次创建数据库的时候 ...

  4. ADC复用重映射

  5. HDU 6188:Duizi and Shunzi(贪心)(广西邀请赛)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6188 题意 有n个数字,每个数字小于等于n,两个相同的数字价值为1,三个连续的数字价值为1 .问这n个 ...

  6. hdu1233 还是畅通工程 最小生成树

    给出修建边的边权,求连通所有点的最小花费 最小生成树裸题 #include<stdio.h> #include<string.h> #include<algorithm& ...

  7. hdu 5312 dp(背包)、二分图或其他姿势

    题意:给出一个二分图(不一定连通),问最多能加多少边,使它仍然是二分图 BC周年庆第四题,貌似终判再终判之后数据还是有问题``` 据说貌似可以用bitset搞,而且姿势优美是正解```然而我还是用的d ...

  8. hello1与hello2的代码分析

    1.hello1代码分析 hello.java package javaeetutorial.hello1; import javax.enterprise.context.RequestScoped ...

  9. memsql 基本完全免费了

    一个很好的消息是memesql 从6.7 版本开始,对于用户来说已经可以免费使用了(ha 以及安全功能),只是目前有一个 限制是集群内存最大可以使用的是128G,但是一般来说已经够用. 参考资料 ht ...

  10. prisma 集成 pipelinedb测试

    pipelinedb 是一个基于pg数据库开发的stream sql 数据库,和prisma 集成起来可以开发很 方便的stream 应用 使用docker 安装 项目初始化 prisma init ...