本文主要介绍下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
指定Solr执行主查询时使用的查询解析器。比如:defType=dismax
。
如果没有指定defType
,将默认使用标准个查询解析器。
参数sort
指定查询结果升序或降序。这个参数可以作用于数字或字母内容。可以使用全消息或全大写。(比如,全是asc
或ASC
)。
Solr可以根据文档分值或其他被索引或使用DocValues
(即,在schema.xml
文件中使用multiValued="false"
和docValues="true"
或者indexed="true"
的字段,如果没有启用DocValues
,将使用检索数据)的单值字段值来进行排序。提供:
analyzer
,并且内容被解析进标记,致使排序不一致),或analyzer
(比如KeywordTokenizer)且只产生一个检索词。 schema.xml
文件中使用<copyField>指定复制字段。然后就可以查询该字段,在克隆字段上排序。 示例 | 结果 |
---|---|
如果没有指定参数`sort`,将根据打分降序排列。 | |
score desc | 根据打分从高到底降序排列。 |
price asc | 根据字段`price`升序排列。 |
inStock desc, price asc | 根据字段`inStock`降序排列,然后根据字段`price`升序排列。 |
关于排序参数:
sort=<field name>+<direction>,<field name>+<direction>],...
该参数指定Solr查询响应展示内容的偏移量。默认值是0.换句话说,默认情况下,Solr返回的结果没有偏移,从头开始。设置一个值,比如3,Solr将跳过前面 几条数据,从指定偏移位置开始返回。你可以使用这种方式来分页。比如,如果参数rows
设置为10,可以通过设置start
为0来连续返回几页数据,然后使用相同的查询参数,设置start
为10,再次查询,然后设置20.
可以使用参数rows
来进行分页查询。这个参数指定了一次查询最大返回文档的数目。默认值是10.就是说,默认一次查询返回10个文档数据。
参数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实例)。参数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 | 返回文档所有字段,以及每个文档的分值。 |
函数可以为结果中每一个文档计算结果,并返回伪字段:fl=id,title,product(price,popularity)
。
Document Transformers可以用来修改查询结果中的每一个文件的返回信息:fl=id,title,[explain]
。
可以指定字段、函数、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":[{
...
参数debug
可以指定多次,并支持以下参数:
debug=true
) debugQuery=true
可以使用debug=all
替代。 参数explainOther
指定Lucene查询来标记文档集。如果非空,本次查询将返回调试信息,以及主查询(指定q
参数)查询文档集的解释信息。比如:q=supervillians&debugQuery=on&explainOther=id:juggernaut
。
上面的查询允许你检查最佳匹配的分值解释信息,可以与id:juggernaut
进行比较,可以知道为什么不是你期望的排名。
默认参数为空,没有额外解释信息返回。
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.
此参数指定允许搜索完成的时间,以毫秒为单位。如果处理超时,只返回部分信息。
This parameter may be set to either true or false.
该参数可以设置为true或false。
如果设置为true,返回结果中不包含header数据。header数据包括请求信息,比如请求完成时间。默认是false。
指定用于格式化响应结果的请求writer。详细信息查看Response Writers。
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)
默认情况下,Solr日志记录所有请求参数。从4.7版本开始,可以设置参数来限制哪些参数被记录。这有助于记录你认为比较重要的参数。比如,你可以定义:logParamsList=q,fq
。只有q
和fq
参数会被记录。
如果不希望记录任何参数,你可以给参数logParamsList
赋空值(比如:logParamsList=
)。
这个参数可以应用与所有的Solr请求,不只查询请求。
原文链接:Common Query Parameters
翻译:沉潜飞动
译文链接:通用查询参数