摘要: 函数查询允许你使用一个或多个数字字段的真实值生成一个相关性分数,函数查询在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. Jmeter系列培训(1)--开山篇

    ​       一直以来,我们不断分享,有的人喜欢,也有的人不喜欢,这都没什么,喜欢的点个赞,留个言,不喜欢的就不看好了,今天我们继续,关于jmeter我们分享了很多工作遇到的问题的解决方案,但是很多 ...

  2. iOS runtime实用篇--和常见崩溃say good-bye

    源码 https://github.com/chenfanfang/AvoidCrash 程序崩溃经历 其实在很早之前就想写这篇文章了,一直拖到现在. 程序崩溃经历1 我们公司做的是股票软件,但集成的 ...

  3. Error: timed out while waiting for target halted

    /************************************************************************************ * Error: timed ...

  4. Buildroot Qt 5

    /********************************************************************************* * Buildroot Qt 5 ...

  5. 《DSP using MATLAB》Problem 4.17

  6. 【转】python3中bytes和string之间的互相转换

    问题: 比对算法测试脚本在python2.7上跑的没问题,在python3上报错,将base64转码之后的串打印出来发现,2.7版本和3是不一样的:2.7就是字符串类型的,但是3是bytes类型的,形 ...

  7. python表单验证封装

    在Web程序中往往包含大量的表单验证的工作,如:判断输入是否为空,是否符合规则. <!DOCTYPE html><html><head lang="en&quo ...

  8. day41 python【事物 】【数据库锁】

    MySQL[五] [事物 ][数据库锁]   1.数据库事物 1. 什么是事务  事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性 ...

  9. Win8被禁购信息战由暗到明

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jhzyz/article/details/26629277 冯强/文 关于中国政府禁止採购微软Win ...

  10. 用vbs打开文件

    set ws=createobject("wscript.shell")ws.run"打开文件所使用的程序+空格+程序路径",x,ture Run方法有三个参数 ...