函数查询 让我们可以利用 numeric域的值 或者 与域相关的的某个特定的值的函数,来对文档进行评分。
怎样使用函数查询
这里主要有两种方法可以使用函数查询,这两种方法都是通过solr http 接口的。
- 内嵌在正常的solr查询表达式中。即,将函数查询写在 q这个参数中,这时候,我们使用_val_将函数与其他的查询加以区别。至于具体怎样使用,请读者留意下面的例子。
- 使用明确为函数查询的参数,比如说dismax中的bf(boost function)这个参数。 注意:bf这个参数是可以接受多个函数查询的,它们之间用空格隔开,它们还可以带上权重。所以,当我们使用bf这个参数的时候,我们必须保证单个函数中是没有空格出现的,不然程序有可能会以为是两个函数。
例如: q=dismax&bf="ord(popularity)^0.5 recip(rord(price),1,1000,1000)^0.3
函数的格式(Function Query Syntax)
目前,function query 并不支持 a+b 这样的形式,我们得把它写成一个方法形式,这就是 sum(a,b).
可以利用的函数 (available function)
constant
支持有小数点的常量
例如:1.5 ;
SolrQuerySyntax:_val_:1.5
fieldvalue
这个函数将会返回numeric field的值,这个域必须是indexd的,非multiValued的。格式很简单,就是该域的名字。如果这个域中没有这样的值,那么将会返回0。
ord
对于一个域,它所有的值都将会按照字典顺序排列,这个函数返回你要查询的那个特定的值在这个顺序中的排名。这个域,必须是非multiValued的,当没有值存在的时候,将返回0.
例如:某个特定的域只能去三个值,“apple”、“banana”、“pear”,那么ord(“apple”)=1,ord(“banana”)=2,ord(“pear”)=3.
需要注意的是,ord()这个函数,依赖于值在索引中的位置,所以当有文档被删除、或者添加的时候,ord()的值就会发生变化。当你使用MultiSearcher的时候,这个值也就是不定的了。
rord
这个函数将会返回与ord相对应的倒排序的排名。
格式: rord(myIndexedField).
sum
这个函数的意思就显而易见啦,它就是表示“和”啦。
格式:sum(x,1)
sum(x,y)
sum(sqrt(x),log(y),z,0.5)
product
product(x,y,...)将会返回多个函数的乘积。
格式:product(x,2)
product(x,y)
div
div(x,y)表示x除以y的值
格式:div(1,x)
div(sum(x,100),max(y,1))
pow
pow表示幂值。pow(x,y) =x^y。
例如:pow(x,0.5) 表示开方
pow(x,log(y))
abs
abs(x)将返回表达式的绝对值
格式:abs(-5)
格式:abs(x)
log
log(x)将会返回基数为10,x的对数
格式: log(x)
log(sum(x,100))
sqrt
sqrt(x) 返回 一个数的平方根
格式:sqrt(2)
sqrt(sum(x,100))
map
如果 x>=min,且x<=max,那么map(x,min,max,target)=target.
如果 x不在[min,max]这个区间内,那么map(x,min,max,target)=x.
格式:map(x,0,0,1)
scale
scale(x,minTarget,maxTarget) 这个函数将会把x的值限制在[minTarget,maxTarget]范围内。
query
query(subquery,default)将会返回给定subquery的分数,如果subquery与文档不匹配,那么将会返回默认值。任何的查询类型都是受支持的。
可以通过引用的方式,也可以直接指定查询串。
例子:q=product(popularity, query({!dismax v='solr rocks'}) 将会返回popularity和通过dismax 查询得到的分数的乘积。
q=product(popularity, query($qq)&qq={!dismax}solr rocks 跟上一个例子的效果是一样的。不过这里使用的是引用的方式
q=product(popularity, query($qq,0.1)&qq={!dismax}solr rocks 在前一个例子的基础上又加了一个默认值。
linear
linear(x,m,c)表示 m*x+c ,其中m和c都是常量,x是一个变量也可以是一个函数。
例如: linear(x,2,4)=2*x+4.
recip
recip(x,m,a,b)=a/(m*x+b)其中,m、a、b是常量,x是变量或者一个函数。
当a=b,并且x>=0的时候,这个函数的最大值是1,值的大小随着x的增大而减小。
例如:recip(rord(creationDate),1,1000,1000)
max
max(x,c)将会返回一个函数和一个常量之间的最大值。
例如:max(myfield,0)
分享到:
相关推荐
solr functionquery函数查询功能强大,但字符串函数比较缺乏,该示例是contain示例,表示值中包含传入的字符串即返回1 否则返回0,可用于solr查询中如果某个字段包含动态传入的值在排名优先。有其他查询排序需求...
- **查询设计**:通过调整查询语句的结构,如使用“exists”查询或“join”查询,以适应Solr的查询机制,提升性能。 - **硬件和架构优化**:例如,增加Solr服务器的内存,使用SSD硬盘提升I/O速度,或者采用更高效的...
总结来说,通过Solr的函数查询和自定义插件,我们可以灵活地构建电商搜索的自定义打分机制。这不仅可以提升搜索结果的相关性,还能更好地满足业务需求,比如强调热门商品、促销商品或者高评价商品。在实际操作中,...
### Solr创建索引并查询的关键知识点 #### 一、Solr简介 Apache Solr是一款开源的全文搜索引擎平台,基于Lucene实现。它提供了一套完整的搜索解决方案,并且支持多种高级特性,如高亮显示、分面搜索、地理位置搜索...
3. **倒排索引**:Solr的核心特性之一,将每个Token与它在哪些文档中出现的信息关联起来,形成倒排索引。这大大加快了查询速度。 4. **更新与删除**:Solr支持对已有文档的更新和删除,这涉及到索引的实时维护,...
2. 函数查询 3. 地理位置查询 4. JSON Facet 章节四:Solr高级(下) 1. 深度分页 2. Solr Join查询 3. 相关度排序 4.Solr缓存 5.Spring Data Solr 章节五:综合案例,电商网站搜索页面 1.关键字搜索 2.搜索面板...
第01讲 solr5简介第02讲 solr5之Schema第03讲 solr5之Solrconfig第04讲 solr5单机安装与配置第05讲 solrj基础(一)第06讲 solrj基础(二)第07讲 solrj之SolrBean第08讲 solrj语法详解第09讲 Solrj之Multicore查询第10...
第01讲 solr5简介第02讲 solr5之Schema第03讲 solr5之Solrconfig第04讲 solr5单机安装与配置第05讲 solrj基础(一)第06讲 solrj基础(二)第07讲 solrj之SolrBean第08讲 solrj语法详解第09讲 Solrj之Multicore查询第10...
第01讲 solr5简介第02讲 solr5之Schema第03讲 solr5之Solrconfig第04讲 solr5单机安装与配置第05讲 solrj基础(一)第06讲 solrj基础(二)第07讲 solrj之SolrBean第08讲 solrj语法详解第09讲 Solrj之Multicore查询第10...
第01讲 solr5简介第02讲 solr5之Schema第03讲 solr5之Solrconfig第04讲 solr5单机安装与配置第05讲 solrj基础(一)第06讲 solrj基础(二)第07讲 solrj之SolrBean第08讲 solrj语法详解第09讲 Solrj之Multicore查询第10...
在本篇文章中,我们将深入探讨如何使用Java API来与Solr 7.1.0进行交互,并了解Solr最新支持的SQL查询功能。 首先,让我们来讨论如何通过Java API与Solr 7.1.0进行通信。Solr提供了一个名为SolrJ的客户端库,它允许...
第01讲 solr5简介第02讲 solr5之Schema第03讲 solr5之Solrconfig第04讲 solr5单机安装与配置第05讲 solrj基础(一)第06讲 solrj基础(二)第07讲 solrj之SolrBean第08讲 solrj语法详解第09讲 Solrj之Multicore查询第10...
第01讲 solr5简介第02讲 solr5之Schema第03讲 solr5之Solrconfig第04讲 solr5单机安装与配置第05讲 solrj基础(一)第06讲 solrj基础(二)第07讲 solrj之SolrBean第08讲 solrj语法详解第09讲 Solrj之Multicore查询第10...
4. 高级搜索功能:Solr提供丰富的查询语法,如布尔逻辑、短语匹配、模糊匹配、字段限制等,以及自定义查询解析器和过滤器。 5. 自定义排序和评分:用户可以自定义文档排序规则和评分算法,以满足特定的业务需求。 6....
faceted搜索是Solr的高级搜索功能之一,允许用户在搜索结果中进行分组统计。例如,可以按照商品的分类进行分组显示,提供类似面包屑导航的用户体验。在Solr中,分面查询的结果字段为facet_counts,与responseHeader...
主要讲解了 solr客户端如何调用带账号密码的solr服务器调用,实现添加索引和查询索引,以及分组查询
第01讲 solr5简介第02讲 solr5之Schema第03讲 solr5之Solrconfig第04讲 solr5单机安装与配置第05讲 solrj基础(一)第06讲 solrj基础(二)第07讲 solrj之SolrBean第08讲 solrj语法详解第09讲 Solrj之Multicore查询第10...
第01讲 solr5简介第02讲 solr5之Schema第03讲 solr5之Solrconfig第04讲 solr5单机安装与配置第05讲 solrj基础(一)第06讲 solrj基础(二)第07讲 solrj之SolrBean第08讲 solrj语法详解第09讲 Solrj之Multicore查询第10...
第01讲 solr5简介第02讲 solr5之Schema第03讲 solr5之Solrconfig第04讲 solr5单机安装与配置第05讲 solrj基础(一)第06讲 solrj基础(二)第07讲 solrj之SolrBean第08讲 solrj语法详解第09讲 Solrj之Multicore查询第10...
Solr提供丰富的查询语法,包括布尔运算、短语匹配、范围查询等,还支持自定义查询解析器和函数查询,以实现复杂的查询逻辑。 1.2.4 核心 在Solr中,每个独立的搜索服务实例被称为一个“核心”(Core),每个核心...