本文主要介绍下Solr解析器中通用的查询参数。这些参数能够在标准查询解析器、DisMax查询解析器及eDisMax查询解析器中通用。
下表总结了Solr通用的查询参数,支持标准的、DisMax、eDisMax查询请求。
参数 | 描述 |
defType | 选择用来处理查询的查询分析器。 |
sort | 根据响应的分数或另一个指定的特性对查询的响应进行正序或倒序排序。 |
start | 指定Solr查询响应展示内容的偏移量(默认0)。 |
rows | 控制一次返回多少条数据(默认10) |
fq | 对查询结果指定一个查询过滤器 |
fl | 指定字段列表限制查询响应中返回信息。这些字段应该在索引时设置为储存状态才能返回。 |
debug | 请求响应中附加的调试信息。指定参数`debug=timing`,只返回时间信息;指定参数`debug=results`,返回每个文档的“解释”信息;指定参数`debug=query`返回所有调试信息。 |
explainOther | 参数`explainOther`指定Lucene查询来标记文档集。如果非空,本次查询将返回调试信息,以及主查询(指定`q`参数)查询文档集的解释信息。 |
timeAllowed | 定义要处理的查询的时间。如果处理超时,只返回部分信息。 |
omitHeader | 如果设置为true,返回结果中不包含header数据。header数据包括请求信息,比如请求完成时间。默认是false。 |
wt | 指定用于格式化响应结果的请求writer。 |
logParamsList | 默认情况下,Solr记录所有参数。设置该参数来限制已记录的参数。要被记录的参数,以逗号分割(比如`logParamsList=param1,param2`)。空列表表示不记录任何参数,如果要记录所有参数,不要定义这个参数。 |
接下来的章节将详细描述各个参数。
defType
参数defType
指定Solr执行主查询时使用的查询解析器。比如:defType=dismax
。
如果没有指定defType
,将默认使用标准个查询解析器。
sort
参数sort
指定查询结果升序或降序。这个参数可以作用于数字或字母内容。可以使用全消息或全大写。(比如,全是asc
或ASC
)。
Solr可以根据文档分值或其他被索引或使用DocValues
(即,在schema.xml
文件中使用multiValued="false"
和docValues="true"
或者indexed="true"
的字段,如果没有启用DocValues
,将使用检索数据)的单值字段值来进行排序。提供:
- 没有进行标记(即,字段没有
analyzer
,并且内容被解析进标记,致使排序不一致),或 - 使用分析器
analyzer
(比如KeywordTokenizer)且只产生一个检索词。
如果你向对一个需要进行标记便于检索的字段排序,可以在schema.xml
文件中使用<copyField>指定复制字段。然后就可以查询该字段,在克隆字段上排序。
下面的表格将说明如果设置各种参数来对Solr响应进行排序:
示例 | 结果 |
如果没有指定参数`sort`,将根据打分降序排列。 | |
score desc | 根据打分从高到底降序排列。 |
price asc | 根据字段`price`升序排列。 |
inStock desc, price asc | 根据字段`inStock`降序排列,然后根据字段`price`升序排列。 |
关于排序参数:
- 排序必须包含一个字段名(或打分),之后跟一个空白字符(在URL字符串中使用+或%20),之后跟排序方向(asc或desc)。
- 多种排序规则可以使用逗号隔开,使用这样的语法:
sort=<field name>+<direction>,<field name>+<direction>],...
- 如果有多个排序条件,只有在第一个排序结果并列,第二个才生效。如果有第三个从句,只有当第一个和第二个都并列相同时,才生效。依次类推。
start
该参数指定Solr查询响应展示内容的偏移量。默认值是0.换句话说,默认情况下,Solr返回的结果没有偏移,从头开始。设置一个值,比如3,Solr将跳过前面 几条数据,从指定偏移位置开始返回。你可以使用这种方式来分页。比如,如果参数rows
设置为10,可以通过设置start
为0来连续返回几页数据,然后使用相同的查询参数,设置start
为10,再次查询,然后设置20.
rows
可以使用参数rows
来进行分页查询。这个参数指定了一次查询最大返回文档的数目。默认值是10.就是说,默认一次查询返回10个文档数据。
fq
参数fq
可以定义一个限制返回文档父集,不影响评分。通过指定参数fq
将缓存主查询,用来提高复杂查询速度。当之后使用相同的过滤器,将会命中缓存,缓存中的结果立即返回。
使用参数fq
时,需要注意:
- 参数
fq
可以在一个查询中指定多次。只有每个参数实例的交集才能返回。在下面的例子中,只有popularity大于10且section是0的才能返回。fq=popularity:[10 TO *]&fq=section:0
- 过滤查询可以包含复杂的布尔查询。上面的例子也可以使用两个从句一个
fq
实现:fq=+popularity:[10 TO *] +section:0
。 - 每个过滤查询的文档集都是独立缓存的。一次,关于签名的例子:使用一个
fq
两个从句,和使用两个分开的fq
将不想同(了解调整高速缓存大小和确保过滤缓存,看配置Solr实例)。 - 对所有参数:在URL中特殊字符需要进行转移为十六进制。在线工具http://meyerweb.com/eric/tools/dencoder/可以提供这种转码。
fl
参数fl
限制响应信息中包含的字段列表。该字段需要在索引时被存储。
字段列表可以通过空格或逗号分割。字符串”score”可以被用来指明特定查询的每个文档的分数作为字段返回。通配符”*”表示文档的所有字段。可以添加伪字段、函数、transformers作为字段返回。
下表是如果使用fl
的基础示例:
字段 | 结果 |
id name price | 只返回id, name, 和 price |
id,name,price | 只返回id, name, 和 price |
id name, price | 只返回id, name, 和 price |
id score | 只返回id和score |
\* | 返回文档所有字段。这是参数`fl`默认值。 |
\* score | 返回文档所有字段,以及每个文档的分值。 |
Function Values
函数可以为结果中每一个文档计算结果,并返回伪字段:fl=id,title,product(price,popularity)
。
Document Transformers
Document Transformers可以用来修改查询结果中的每一个文件的返回信息:fl=id,title,[explain]
。
Field Name Aliases
可以指定字段、函数、transformer的显示名,比如:fl=id,sales_price:price,secret_sauce:prod(price,popularity),why_score:[explain style=nl]
,
"response":{"numFound":2,"start":0,"docs":[ { "id":"6H500F0", "secret_sauce":2100.0, "sales_price":350.0, "why_score":{ "match":true, "value":1.052226, "description":"weight(features:cache in 2) [DefaultSimilarity], result of:", "details":[{ ...• 1 • 2 • 3 • 4 • 5 • 6 • 7 • 8 • 9 • 10 • 11
debug
参数debug
可以指定多次,并支持以下参数:
- debug=query: 至返回查询的调试信息
- debug=timing: 返回查询执行时间的调试信息
- debug=results: 返回结果分值的调试信息
- debug=all: 返回所有的调试信息(也可以使用
debug=true
)
为了向后兼容,debugQuery=true
可以使用debug=all
替代。
默认查询不包括调试信息。
explainOther
参数explainOther
指定Lucene查询来标记文档集。如果非空,本次查询将返回调试信息,以及主查询(指定q
参数)查询文档集的解释信息。比如:q=supervillians&debugQuery=on&explainOther=id:juggernaut
。
上面的查询允许你检查最佳匹配的分值解释信息,可以与id:juggernaut
进行比较,可以知道为什么不是你期望的排名。
默认参数为空,没有额外解释信息返回。
timeAllowed
This parameter specifies the amount of time, in milliseconds, allowed for a search to complete. If this time expires before the search is complete, any partial results will be returned.
此参数指定允许搜索完成的时间,以毫秒为单位。如果处理超时,只返回部分信息。
omitHeader
This parameter may be set to either true or false.
该参数可以设置为true或false。
如果设置为true,返回结果中不包含header数据。header数据包括请求信息,比如请求完成时间。默认是false。
wt
指定用于格式化响应结果的请求writer。详细信息查看Response Writers。
cache=false
Solr默认缓存所有的查询、过滤查询结果。为了禁用缓存,设置参数cache=false
。
还可以使用cost选项来控制非缓存的过滤查询。这允许你能够指定低耗非缓存过滤,而不是高耗非缓存过滤器。
对于高耗过滤器,如果cache=false
,cost>=100
,查询实现了PostFilter
,在匹配主查询和其他过滤查询之后,一个收集器将被请求来进行查询和过滤文档。可以有多个后置过滤器,可以根据cost配置。
比如:
// normal function range query used as a filter, all matching documents // generated up front and cached fq={!frange l=10 u=100}mul(popularity,price) // function range query run in parallel with the main query like a traditional // lucene filter fq={!frange l=10 u=100 cache=false}mul(popularity,price) // function range query checked after each document that already matches the query // and all other filters. Good for really expensive function queries. fq={!frange l=10 u=100 cache=false cost=100}mul(popularity,price)• 1 • 2 • 3 • 4 • 5 • 6 • 7 • 8 • 9 • 10 • 11
logParamsList
默认情况下,Solr日志记录所有请求参数。从4.7版本开始,可以设置参数来限制哪些参数被记录。这有助于记录你认为比较重要的参数。比如,你可以定义:logParamsList=q,fq
。只有q
和fq
参数会被记录。
如果不希望记录任何参数,你可以给参数logParamsList
赋空值(比如:logParamsList=
)。
这个参数可以应用与所有的Solr请求,不只查询请求。
翻译:沉潜飞动
译文链接:通用查询参数