solr查询参数

半城伤御伤魂 提交于 2020-04-08 08:28:10

部分摘自:http://blog.csdn.net/u010342038/article/details/52997388

界面:

参数说明:

注意,以下是对所有的查询解析器都通用的参数。

defType :选择用来处理查询的查询分析器。

q  (query)查询的关键字,此参数最为重要,例如,q=id:1,默认为q=*:*,

fq  (filter query)过虑查询,提供一个可选的筛选器查询。返回在q查询符合结果中同时符合的fq条件的查询结果,例如:q=id:1&fq=sort:[1 TO 5],找关键字id为1 的,并且sort是1到5之间的。

sort  排序方式,例如id  desc 表示按照 "id" 降序

start  返结果的第几条记录开始,一般分页用,默认0开始

rows  指定返回结果最多有多少条记录,默认值为 10,配合start实现分页

fl  (field list)  指定返回哪些字段,用逗号或空格分隔,注意:字段区分大小写,例如,fl= id,title,sort

df (default field)  默认的查询字段,一般默认指定。

wt  (writer type)指定输出格式,有 xml, json, php等

indent   返回的结果是否缩进,默认关闭,用 indent=true|on 开启,一般调试json,php,phps,ruby输出才有必要用这个参数。

version   查询语法的版本,建议不使用它,由服务器指定默认值。

详细参数说明

  • 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":[{

...

  • 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)

logParamsList

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

 

检索运算符

参数

描述

指定要查找的字段,比如:title:"The Right Way" AND text:go

匹配单一字符,比如:te?t匹配test/text

*

匹配0或多个字符,比如:tes*匹配test/testing/tester 注意使用*开头的匹配会导致性能问题

~

基于编辑距离的模糊查询,比如:roam~匹配roams/foam/foams/roam. roam~1(指定距离必须是1)匹配roams/foam,但不会匹配foams

~n

邻近查询,查找相隔一定距离的单词,比如:"jakarta apache"~10(相隔10个单词)

to

范围查询,{}不包含边界,[]包含边界,比如:title:{Aida TO Carmen}

^

加权因子,比如:jakarta^4 apache 查找结果中jakarta更相关 注意基本权重是1,如果小于1那么会被惩罚,大于1是加大。

^=

指定查询语句的score得分为常量,比如:(description:blue OR color:blue)^=1.0 text:shoes

AND(&&)

运算符两边的查询词同时出现 比如:"jakarta apache" AND "Apache Lucene" 注意这里的AND和OR必须为大写

OR

运算符两边的查询词至少一个出现, 默认运算符,比如 "jakarta apache" jakarta 等价于 "jakarta apache" OR jakarta

NOT(!)

运算符后面的查询词不出现,比如"jakarta apache" NOT "Apache Lucene"

+

运算符后面的查询词出现(known as the "required" operator),比如+jakarta lucene查询必须包含jakarta,而lucene可以出现可不出现

-

不能包含运算符后面的查询词 "jakarta apache" -"Apache Lucene"

[]

包含范围边界

{}

不包含范围边界

注意:使用+和-比AND更加明了,建议使用这个。

短语查询:如"zjf xhj"将引号内的内容作为一个整体。

注意:通配符*和?不支持短语查询()

转义字符

+ - && || ! ( ) { } [ ] ^ " ~ * ? : /

这些字符在solr中具有特殊的含义,如果要使用这么字符本身含义,需要利用反斜杠进行转义,比如: \(1\+1\):2

子查询语句

(jakarta OR apache) AND website 查询jakarta或apache出现,并且website必须出现 title:(+return +"pink panther") 查询title中包含return和"pink panther"

 

关于AND和OR的用法:

假如有这两条数据:

第1条id为1,第2条id为2,。

content:zjf hello代表content:zjf OR hello 这里的hello并不是在content中查找,而是在默认搜索字段上查找的。

content:zjf content:hello 代表content中有zjf或者hello关键字,等于:content:(zjf hello)

大部分情况下我们在一个字段上进行检索,所以会设置默认搜索字段。所以AND和OR的一般使用场景是zjf AND xhj这种。

短语查询:当我们输入 zjf xhj的时候,是一种或的关系,如果我们需要检索"zjf xhj"整体,那么就需要用引号括起来。

 

使用soloJ的方式:

String params = "(title:笔记 OR content:笔记) AND catalog_id:2";
SolrQuery query = new SolrQuery();
query.setQuery(params);

 

设置默认查询字段的两种方式:

schema.xml中defaultSearchField和solrconfig.xml中df属性都是默认搜索字段的意思,不过后者只针对"/select"请求。优先级是solrconfig.xml的df高于schema.xml的defaultSearchField。

solrconfig中的例子:

<requestHandler name="/select" class="solr.SearchHandler">

<!-- default values for query parameters can be specified, these

will be overridden by parameters in the request

-->

<lst name="defaults">

<str name="echoParams">explicit</str>

<int name="rows">10</int>

<str name="df">text</str>

</lst>

</requestHandler>

也可以在http请求中加入df参数控制本次请求的的默认搜索字段

 

 

字段名称

字段含义

  

indexed

如果该字段是要做查询的,需要将其设置为indexed,进行索引,以便能够根据该字段进行查询。

但是与具体分词手段无关,如果涉及到如果分词,需要使用type属性

  

stored

在solr查询结果中能够正常返回,如果一个字段stored=false,则查询结果不会包括该字段。

 

也就是说,只有配置了indexed=true的列才可以查询,只有配置stored=true的列才可以返回结果。

 

 

q和fq的顺序:

fq有可能从缓存中获取,所以一般是先执行fq,然后将fq结果和q一起传给lucene去检索数据。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!