本文主要介绍下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指定查询结果升序或降序。这个参数可以作用于数字或字母内容。可以使用全消息或全大写。(比如,全是ascASC)。
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, 和 priceid,name,price只返回id, name, 和 priceid name, price只返回id, name, 和 priceid 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":[{...

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=falsecost>=100,查询实现了PostFilter,在匹配主查询和其他过滤查询之后,一个收集器将被请求来进行查询和过滤文档。可以有多个后置过滤器,可以根据cost配置。
比如:

// normal function range query used as a filter, all matching documents// generated up front and cachedfq={!frange l=10 u=100}mul(popularity,price)// function range query run in parallel with the main query like a traditional// lucene filterfq={!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)

logParamsList

默认情况下,Solr日志记录所有请求参数。从4.7版本开始,可以设置参数来限制哪些参数被记录。这有助于记录你认为比较重要的参数。比如,你可以定义:logParamsList=q,fq。只有qfq参数会被记录。
如果不希望记录任何参数,你可以给参数logParamsList赋空值(比如:logParamsList=)。

这个参数可以应用与所有的Solr请求,不只查询请求。

原文链接:Common Query Parameters
翻译:沉潜飞动
译文链接:通用查询参数


=========================================================================================================


从5.0开始,solr采用了自动发现模式(discovery,区别于传统模式legacy),Solr会自动找到安装目录中、或solr_home中的配置文件:core.properties,并根据里面的name属性来初始化相对于的core。solr.xml中仍然会定义一些配置参数,但是core本身不会定义在这个文件中。


Solr会递归搜索所有solr和solr_home目录和子目录,当在一个目录中发现core.properties后,就停止搜索当前目录的所有子目录,转向下一个同级目录搜索。所以,下面两个配置只有第一个生效:
./cores/core1/core.properties
./cores/core1/coremore/core5/core.properties
而下面三个配置,都会生效:
./cores/somecores/core1/core.properties
./cores/somecores/core2/core.properties
./cores/othercores/core3/core.properties

一个core.properties文件代表一个core。文件的内容可以是空的,这个时候,solr会把该文件所在的目录作为name,比如跟./cores/core1/core.properties对应的core name就是core1;instanceDir就是./cores/core1;dataDir就是./cores/core1/data,等等。

core.properties配置参数:
  • name:SolrCore的名字
  • config:该core的配置文件名字,缺省是solrconfig.xml
  • schema:schema文件的名字,缺省是schema.xml
  • dataDir:索引文件的存放位置,相对于instanceDir的相对路径,缺省是“data”
  • configSet:configSet的名字
  • properties:该core的额外属性文件的路径和名字,可以是绝对路径、或相对于instanceDir的相对路径
  • transient:如果是true,当solr达到transientCacheSize这个限定时,这个core会被卸载(unload);缺省是false,即使用LRU原则卸载。SolrCloud模式下true是不推荐的
  • loadOnStartup:缺省是true,就是在solr启动的时候启动该core。SolrCloud模式下false是不推荐的
  • coreNodeName:只在SolrCloud的情况下使用,是这个replica所在的node的标识。这个名字缺省是自动生成的。这个配置的名字可以在以后需要替换一个自动生成的名字的时候使用,比如使用一个新机器(新的hostname和port)替换一个坏机器的时候
  • ulogDir:存放update log的绝对或相对路径(SolrCloud)
  • shard:这个core所归属的shard(SolrCloud)
  • collection:这个core所属的collection名字(SolrCloud)
  • roles:SolrCloud的一个保留参数,未来可能会用到,或用户用了做一些自己的标记
另外,用户还可以定义自己的属性,以作为其他配置文件的变量。

solr.xml配置标签:
  • <solrcloud/>:定义几个跟SolrCloud相关的参数,当solr启动参数带有-DzkRun 或 -DzkHost时,这个标签才生效
  • <logging/>:定义跟日志相关的配置参数
  • <shardHandlerFactory/>:配置自定义的shard handler

Config Sets:
在multicore的solr实例中,可以利用config set来提供统一的配置文件给各个core共享。这个可以通过在configSetBaseDir目录下创建一个目录来实现,该目录的结构如下:
/<configSetBaseDir>
    /configset1
        /conf
            /schema.xml
            /solrconfig.xml
    /configset2
        /conf
            /schema.xml
            /solrconfig.xml
缺省的configSetBaseDir就是$SOLR_HOME/configsets,也可以在solr.xml中指定这个目录。

非SolrCloud模式下,可以通过CoreAdmin API,把configset作为参数来创建一个新的core,比如:
http://<solr>/admin/cores?action=CREATE&name=mycore&instanceDir=path/to/instanc e&configSet=configset2

如果是SolrCloud模式下,配置信息是从zookeeper数据库中获取的。