Solr学习总结(六)solr的函数查询Function Queries
摘要: 函数查询允许你使用一个或多个数字字段的真实值生成一个相关性分数,函数查询在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的更多相关文章
- Solr学习笔记---部署Solr到Tomcat上,可视化界面的介绍和使用,Solr的基本内容介绍,SolrJ的使用
学习Solr前需要有Lucene的基础 Lucene的一些简单用法:https://www.cnblogs.com/dddyyy/p/9842760.html 1.部署Solr到Tomcat(Wind ...
- Solr学习之二-Solr基础知识
一 基本说明 简单来说Solr是基于Lucene的高性能的,开源的Java企业搜索服务器.Solr可以看作一个Web app,运行在tomcat或Jetty这类HTTP服务器上, 底层是一个基于Luc ...
- Solr学习笔记(1) —— Solr概述&Solr的安装
一.概述 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字.分类.价格搜索商品信息,也可以根据价格进行排序. 1.1 实现方法 在一些大型门户网站.电子商务网站等都需要站内搜索功能,使用传统 ...
- solr学习(六):使用自定义int/long类型主键
需求分析: 我不想使用solr默认的主键id,我想换成其他的,比如我的文章id为article_id,我想让article_id作为主键. 而且,我的主键是int类型,而solr的主键默认是strin ...
- Solr学习01:Solr基础知识
一.什么是solr 首先,要了解下Solr是什么,以下是官方的描述. Solr是一个来自Apache Lucence项目,是一个热门开源的企业级搜索平台.为目前世界上相当多的大型互联网站点提供搜索和导 ...
- Solr学习笔记(2) —— Solr管理索引库
一.维护索引 1.1 添加/更新文档 1.2 批量导入数据(使用dataimport) 第一步:把mysql的数据驱动.以及dataimport插件依赖的jar包添加到solrcore(collect ...
- Oracle学习笔记六 SQL常用函数
函数的分类 Oracle 提供一系列用于执行特定操作的函数 SQL 函数带有一个或多个参数并返回一个值 以下是SQL函数的分类:
- docker学习(六) Docker命令查询
Docker命令查询 1.基本语法docker [OPTIONS] COMMAND [arg...]一般来说,Docker 命令可以用来管理 daemon,或者通过 CLI 命令管理镜像和容器.可以通 ...
- Solr学习总结(六)SolrNet的高级用法(复杂查询,分页,高亮,Facet查询)
上一篇,讲到了SolrNet的基本用法及CURD,这个算是SolrNet 的入门知识介绍吧,昨天写完之后,有朋友评论说,这些感觉都被写烂了.没错,这些基本的用法,在网上百度,资料肯定一大堆,有一些写的 ...
随机推荐
- windows 下python导入excel
1.安装相应包 2.导入代码
- 微信小程序插件开发
小程序插件功能介绍 插件,是可被添加到小程序内直接使用的功能组件.开发者可以像开发小程序一样开发一个插件,供其他小程序使用.同时,小程序开发者可直接在小程序内使用插件,无需重复开发,为用户提供更丰富的 ...
- Unity3D游戏-愤怒的小鸟游戏源码和教程(二)
Unity愤怒的小鸟游戏教程(二) 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) AngryEva游戏效果 ...
- ubuntu journalctl — 检索 systemd 日志
常用: 查看最近1000行log sudo journalctl -f --lines=1000 -u server.$PROJECT_NAME --no-full, --full, -l 如果字段内 ...
- 20155328 2016-2017-2 《Java程序设计》第5周学习总结
教材学习内容总结 程序设计本身的错误,建议使用Exception或其子类实例来表现. Java中所有错误都会被打包成对象. 如果父类异常对象在子类异常对象前被捕捉,则catch子类异常对象的区块将永远 ...
- 一键分享到各个SNS插件
使用百度分享:http://share.baidu.com/code/advance#toid 例: HTML: <div class="bdsharebuttonbox" ...
- 【vue】创建一个vue前端项目,编译,发布
npm: Nodejs下的包管理器. webpack: 它主要的用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源做相应的准备,比如资源的合并和打包. vue-cli: 用户生成Vue工 ...
- 通过手动安装来启动ZStack
当您使用手动安装手册完成ZStack的安装之后,您可以继续进行一些必要的配置 以便用它来自动云环境.ZStack的管控工具zstack-ctl会安装到每一个ZStack管理节点,您可以使用它来控制本地 ...
- es6知识点
扩展运算符(三个点): 将值转换为参数序列. 解构赋值:比如:var [a,b,c]=[1,2,3];
- JVM内存模型(二)
JVM为什么要区分为栈和堆? 栈代表的操作逻辑存储,堆代表的是数据逻辑存储,这样来划分更加清晰: JVM的内存在宏观上面来讲分为私有内存和共享内存:所谓共享内存(堆)寓意就是各个私有的栈(每个线程私有 ...