solr函数查询示例

时间:2018-09-19 17:47:25

标签: solr

有人可以举例说明如何使用Solr函数查询。 我找不到任何具体的示例来显示使用函数查询和不使用函数查询的结果差异。 我想要一些带有示例URL的内容以及响应结果中显示的内容。

1 个答案:

答案 0 :(得分:2)

函数查询是在一个(或多个)可用字段上进行的the above linked proposal。如果必须对字段中的值进行处理以获取所需的值,就添加一个函数查询,就像在数学意义上一样。

实际上不可能显示“带有函数查询的查询与不带有函数查询的查询之间的区别”,因为它们不会做相同的事情。您可以根据需要选择一个(或两个)。

参考手册中的一个采用示例-假设我们有一组描述用户的文档,这些用户有两个字段-mails_readmails_received。为了使任何人的邮件阅读量不到50%,我们可以将过滤器查询作为函数应用(使用Frange查询解析器)(fq在这里意味着过滤器查询-frange是使它是一个函数查询):

fq={!frange l=0 u=0.5}div(mails_read,mails_received)

否则,我们将只能接收刚刚阅读特定范围的电子邮件或已接收特定范围的电子邮件的人-否则我们将必须为保留{{1}的更新值的值编制索引},每次我们更新文档时(这是一种非常有效的策略,通常效率更高)。

a query that invokes a function,最常见的方法是提高新近度(例如,更新的文档会获得更大的提升):

mails_read / mails_received

这会将bf=recip(ms(NOW/HOUR,mydatefield),3.16e-11,1,1) 函数应用于recip字段与当前小时之间的时差(以毫秒为单位)。

  

recip :执行带有recip(x,m,a,b)的倒数函数,实现a /(m * x + b),其中m,a,b是常数,x是任意值任意复杂的函数。

另一个很好的用例是使用特殊的mydatefield字段-如果您使用函数针对此Magic字段进行查询,则该函数返回的值将用作文档的分数(而不是影响通过增强或限制作为查询的结果文档集)。

_val_

..会根据除法结果给出文档的分数(值取决于您)。