Solr查询解析器大全

一.字段查询解析器

  字段查询解析器在指定字段中搜索词项或短语,可以使用该字段定义的任何文本分析方式。f参数指明要进行词项或短语搜索的字段,语法如下:

  {!field f=myfield}hello world

  该语法与使用Lucene查询解析器搜索短语myfield:"hello world"是等价的。

二.词项查询解析器和原始查询解析器

  词项查询解析器可以直接在Solr索引上进行检索,但不能使用字段上定义的文本分析方法。这是它与字段查询解析器的不同之处。词项查询解析器可以对分面搜索返回的值进行过滤,或对Solr索引中直接提取的词项组件进行过滤。词项查询解析器的语法如下:

  {!term f=mystemmedtextfield}engin

  {!term f=mystringfield}Single Term with Spaces

  {!term f=myintfield}1.5

  在之前的例子中,搜索到的值是查询提问中该字段在Solr索引中词项的可读版本。与字段查询解析器一样,f参数指向的是搜索的字段。

  Solr还提供了一个类似的实现形式——原始查询解析器。词项查询解析器与原始查询解析器的唯一区别是原始查询解析器在Solr索引中搜索确切的词项,而词项查询解析器搜索该词项的可读版本。

  在特定字段中,例如:为了提高搜索效率,数值字段的内部存储采用了trie结构,此时词项查询解析器接受数值的可读版本,而原始查询解析器接受Solr索引中该字段内部存储的机读版本。整数字段的数值1可能表示Solr索引中诸如"#8;#0;#0;#0;#1"此类的词项trie结构。

三.函数查询解析器和函数区间查询解析器

  Solr强大的一个功能是在搜索过程中使用函数查询来生成动态值。这样的动态计算值包括确定地理空间距离、执行数学计算、转换字符串或在自定义的函数插件中执行任意代码。

四.嵌套查询和嵌套查询解析器

  Lucene查询解析器和eDisMax查询解析器的查询语法支持一个特殊的运算符_query_,利用它可以方便地对默认的Lucene查询解析器中其它查询解析器进行替换,这使得我们可以在任意复杂的布尔表达式中组合不同的查询解析器。执行嵌套查询的语法为_query_:"[QUERY]",其中[QUERY]表示在q或fq参数中单独使用的任意查询。例如:

  /select?q=category:{"technology" OR "business"} AND _query_:"{!edismax qf=title^10 category^4 text}solr lucene hadoop mahout"

  在许多情况下没有必要显式使用_query_语法,当Lucene查询解析器和eDisMax查询解析器发现查询中包含局部参数时,一般会推测出需要使用嵌套查询。越复杂的查询,在_query_语法中需要使用嵌套查询的可能性就越大,这样做是为了确保按查询意图进行解析。

  除了特殊的_query_运算符之外,Solr还提供了一个内置的嵌套查询解析器,它也可以处理嵌套查询。嵌套查询解析器的局部参数类型是query,通过以下方式调用:

  /select?q={!query v=$nestedQuery}

五.调整权重查询解析器

  调整权重查询解析器允许根据一个文档是否与特定查询匹配,自行定义相关度的调整策略,无须过滤掉与要调整的查询不匹配的文档。通常来说,参数q用于过滤搜索结果,并获得相关度评分中涉及的表达式的相似度情况。调整权重查询解析器可以提交相关度评分中所涉及的词项,而不将其作为过滤器使用。语法如下:

  {!boost b=1000}shouldboost:true

  {!boost b=log(popularity)}category:trending

  {!boost b=recip(ms(NOW, articledate), 3.14e-11, 1, 1)}category:news

  调整权限查询解析器对那些与指定查询值匹配的文档的相关度进行调整,但不会将文档限制为仅与该查询值匹配的那些文档。此外,也可以使用嵌套查询将调整权限查询解析器与其他查询解析器结合使用。

  /select?q=_query_:"{!edismax qf=title content}data science" AND _query_:"{!boost b=log(popularity)}*:*" AND _query_:"{!boost b=recip(ms(NOW, articledate), 3.14e-11, 1, 1)}category:news"

六.前缀查询解析器

  前缀查询解析器可用于通配符查询,语法如下:

  {!prefix f=myfield}engin

  该查询等价于使用Lucene查询解析器搜索myfield:engin*,对myfield字段匹配诸如engine,enginneer或engineering这样的词项。应该注意到,前缀是直接对Solr索引进行搜索,所以在与索引对比之前,不会对输入进行文本。采用词项的索引表示是为了避免前缀输入与要搜索的词项之间出现匹配失误。在大多数情况下,更好的做法是使用Lucene查询解析器或eDisMax查询解析器进行通配符搜索。

七.空间查询解析器

  Solr提供丰富的地理空间搜索功能,可以在索引和查询阶段定义位置或形状。通过给定一个具体位置可以过滤特定范围内的文档。Solr提供两个用于空间查询的查询解析器,一个是空间框查询解析器【bbox】,另一个是空间过滤查询解析器【geofit】。

八.连接查询解析器

  Solr的连接查询解析器可以执行子查询,实现文档集的伪连接。例如,要对查询进行限制,可以对不同的文档集执行子查询,并将原始查询结果集的限制条件设为文档只包含子查询文档中出现的字段值。Solr的连接功能还可以用于垮Solr内核的文档集查询。

九.分支查询解析器

  分支查询解析器根据一些逻辑条件在多个查询/过滤器之间做出选择。它的操作与许多编程语言的分支语句类似。具体语法如下:

  fq={!switch

    case.day=‘date:[NOW/DAY-1DAY TO *]‘

    case.week=‘price:[NOW/DAY-7DAYS TO *]‘

    case.month=‘date:[NOW/DAY-1MONTH TO *]‘

    case.year=‘date:[NOW/DAY-1YEAR TO *]‘

    case.else=‘*:*‘

    v=$withinLast

  }

十.外围查询解析器

  外围查询解析器是为跨度查询的充分使用而设计的,其用于掌握词项彼此之间的位置关系。外围查询解析器使用特殊的运算符n(有序)和w(无序)及在其前面带一个1~99之间额整数值。举例如下:

  {!surround}3w(solr, action):前缀表示,能在距离词项action 3个词项位置之内【无序、向前或向后】找到词项solr

  {!surround}5n(solr, action):前缀表示,能在距离词项action5个位置之内【action必须位于 solr之后】找到词项solr

  {!surround} solr 3w action:中缀表示,等价第一个例子

  {!surround} solr 3n in 2w action:中缀表示,其中词项solr必须在距离词项in之后的3个词项位置之内,而词项action必须在距离词项in之前或之后2个词项位置之内

  外围查询解析器还支持在前缀表示中使用AND和OR运算符,在中缀表示中使用AND、OR、NOT以及()运算符。虽然增加的邻近运算符似乎是Solr可用查询语法的有力补充,但外围查询解析器存在一个主要限制:它不支持文本分析。与词项解析器类似,外围查询解析器不先执行字段类型定义的分析器,而是直接在Solr索引上检索词项。

十一.最大得分查询解析器

  当使用Lucene查询解析器对查询进行评分时,每个词项和子句都会被评分,所有这些评分汇总在一起作为每个文档的总相关度得分。在某些情况下,使用最大得分比使用总得分要好一些。MaxScoreQParserPlugin的用法如下:

  {!maxscore}term1 term2 term3

十二.折叠查询解析器

  折叠查询解析器能够从搜索结果集中删除重复的文档【即这些文档包含指定字段中的相同值】,这称为字段折叠。在Solr中,字段折叠有两种实现方法。第一种是使用功能更丰富的结果分组,将字段中具有相同值的文档合在一起。每一组返回文档的具体数量。第二种是使用折叠查询解析器,将相同字段值的文档合在一起、

原文地址:https://www.cnblogs.com/yszd/p/12512658.html

时间: 2024-08-03 12:11:59

Solr查询解析器大全的相关文章

lucene查询解析器语法

Lucene提供了丰富的API来组合定制你所需要的查询器,同时也可以利用Query Parser提供的强大的查询语法解析来构造你想要的查询器.本文章详细的介绍了Lucene的查询语法.通过Java语法分析器把一个查询字符串解析成 Lucene的查询器.在你选择使用Query Parser前,请考虑以下事项: 如果你打算在程序中拼接查询语法串然后再利用Query Parser转换,那么强烈建议你利用相应的API来自己构造查询器.也就是说,Query Parser是为手工输入高级查询设计的,而不是为

kotlin 写的一个简单 sql 查询解析器

1 package com.dx.efuwu.core 2 3 import org.apache.commons.lang.StringUtils 4 import java.sql.PreparedStatement 5 6 /** 7 * sql 模板处理 8 * @author sunzq 9 * 2017/06/02 10 */ 11 12 /** 13 * 查询的一个条件句 14 */ 15 class QueryBranch(val content: String, val key

solr查询索引

Solr在不修改任务配置的情况下就可以使用查询功能,在web项目中应用可以直接URL进行访问Solr服务器例如:          http://localhost:8080/solr/    collection1/select?q=*%3A*&wt=xml&indent=true 上面的意思就是查询名为collection1的SolrCore的所有内容用xml格式返回并且有缩进. 返回结果如下:          <?xml version="1.0"   

solr查询语法(solr query)

1. CoreQueryParam查询的参数  1) q: 查询字符串,必须的. 2) q.op: 覆盖schema.xml的defaultOperator(有空格时用"AND"还是用"OR"操作逻辑),一般默认指定. 3) df: 默认的查询字段,一般默认指定. 4) qt: query type,指定查询使用的Query Handler,默认为"standard". 5) wt: writer type.指定查询输出结构格式,默认为"

Solr实现Low Level查询解析(QParser)

Solr实现Low Level查询解析(QParser) Solr基于Lucene提供了方便的查询解析和搜索服务器的功能,可以以插件的方式集成,非常容易的扩展我们自己需要的查询解析方式.其中,Solr内置了一些QParser,对一些没有特殊要求的应用来说,可以直接使用这些查询解析组件,而无需做任何修改,只需要了解这些查询解析组件提供的基本参数(Local Params),就可以实现强大的搜索功能. 对于Solr来说,它的设计目标就是尽可能屏蔽底层Lucene的复杂度和难点,而是通过提供可配置的方

7.Solr查询参数

一.基本查询 q  查询的关键字,此参数最为重要,例如,q=id:1,默认为q=*:*, fl  (field list)指定返回哪些字段,用逗号或空格分隔,注意:字段区分大小写,例如,fl= id,title,sort start  返回结果的第几条记录开始,一般分页用,默认0开始 rows  指定返回结果最多有多少条记录,默认值为 10,配合start实现分页 sort  排序方式,例如price asc, id desc wt  (writer type)指定输出格式,有 xml, jso

optparse 模块—— 命令行选项的解析器

15.5 optparse 模块--  命令行选项的解析器 注意:从2.7版本后不再使用:optparse模块不推荐使用,python不再更新该模块,后续的发展将推荐使用argparse模块. 支持python2.3及以上版本 optparse模块比旧的getopt模块具有更方便.更灵活.功能更强大的解析命令行选项的库.optparse使用一种更加声明式的命令行解析风格:你创建一个OptionParser实例,填充选项,并解析命令行.optparse允许用户指定选项,使用传统的GNU/POSIX

Solr查询详解

一. 查询参数说明 在做solr查询的时候,solr提供了很多参数来扩展它自身的强大功能!以下是使用频率最高的一些参数! 1.常用 q - 查询字符串,这个是必须的.如果查询所有*:* ,根据指定字段查询(Name:张三 AND Address:北京) fq - (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的,例如:q=Name:张三&fq=CreateDate:[20081001 TO 20091031],找关键字mm,并且CreateDate是200810

浩哥解析MyBatis源码(十一)——Parsing解析模块之通用标记解析器(GenericTokenParser)与标记处理器(TokenHandler)

原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6724223.html 1.回顾 上面的几篇解析了类型模块,在MyBatis中类型模块包含的就是Java类型与Jdbc类型,和其间的转换处理.类型模块在整个MyBatis功能架构中属于基础组件之一,是提前注册到注册器中,并配置到Configuration中备用. 从这一篇开始解析Parsing解析模块,这个模块不同于Type模块,这个模块更像是一套工具模块.本篇先解析通用标记解析器Gene