作者:手机用户2702935421_666 | 来源:互联网 | 2023-05-18 08:44
简介前面我们在讲SolrRequestHandler和QueryResponseWriter的时候提到过两个参数qt和wt,这两个参数是分别用于选择对应的SolrRequestHa
简介
前面我们在讲SolrRequestHandler和QueryResponseWriter的时候提到过两个参数'qt'和'wt",这两个参数是分别用于选择对应的SolrRequestHandler和QueryResponseWriter的。solr定义了很多类似的参数,它们都分别属于某个大类中,例如"qt"和"wt"就属于CoreQueryParameters。下面罗列一下solr的所有参数列表,来源于solr官网。下面笔者会一一给大家讲解这些参数的作用。
|
|
parameter |
docs |
debugQuery |
CommonQueryParameters |
defType |
CommonQueryParameters |
echoHandler |
CoreQueryParameters |
echoParams |
CoreQueryParameters |
explainOther |
CommonQueryParameters |
facet.* |
SimpleFacetParameters |
fl |
CommonQueryParameters |
fq |
CommonQueryParameters |
hl.* |
HighlightingParameters |
mlt.* |
MoreLikeThis |
omitHeader |
CommonQueryParameters |
qt |
CoreQueryParameters |
rows |
CommonQueryParameters |
sort |
CommonQueryParameters |
start |
CommonQueryParameters |
timeAllowed |
CommonQueryParameters |
wt |
CoreQueryParameters |
CommonQueryParameters
q
q这个参数所传递的就是我们所查询的内容,例如我们要查询"feature"这个关键字,发起的请求就是
http://localhost:8080/solr/collection1/select?q=feature&wt=json&indent=true
solr针对q这个参数支持以solr query syntax的方式,就是solr特有的一种查询表达式,具体可参考文档,
Solr query syntax
sort
大家回忆一下,在前面的章节中,我们在讲解添加索引的时候,提到过boost这个属性,这个属性在查询的时候就可以大派用场了,我们可以跟踪需要,对查询结果针对score(boost属性所设置的分值)进行排序。
Examples |
sort |
Meaning |
|
by default, it is the same as score desc(默认是按分值以降序排列) |
score desc |
sort from highest score to lowest score(按分值以降序排列) |
price asc |
sort in ascending order of the "price" field(按价格字段以降序排列) |
inStock desc, price asc |
sort by "inStock" descending, then "price" ascending(按inStock字段以降序,price以升序排列) |
sum(x_f, y_f) desc |
sort by the sum of x_f and y_f in a descending order(按x_f和y_f字段相加后降序排列) |
注意,并不是所有的field都能排序的。如果schema.xml里面org_name被定义成text型,请问还能sort=org_name desc吗?不能,因为text类型定义的filter已经将org_name进行了切分,一个被切分后的field也就丧失了排序资格。
start and rows
- start:指定第一条记录在所有记录的位置。
- rows:一次性取出多少条数据。start和rows一起使用用于分页。eg start=20&rows=10表示取20到30之间的数据,如果每页显示10条数据,那么这个结果就是第二页到第三页的数据了。
fq
过滤查询参数。它和q一起使用。格式1:fq=field:X,eg q=ibm&fq=org_name:ibm,表示org_name或者org_website里面出现ibm并且org_name里面出现ibm的document。格式2:fq=field:[X TO X],区间查询,eg fq=org_id:[100 TO 200],表示org_id为100(包含)到200(包含)的所有document。给大家贴一段代码,你就知道什么类型的field才能进行区间查询。
fl
这个参数用来选择哪些字段内容需要被返回,具体效果大家参照下面的例子试一下就知道了,这个和sql语句的返回指定字段是一样的。
Examples |
Field List |
Meaning |
id name price |
Only return the "id", "name", and "price" fields(只返回id,name,price三个字段) |
id,name,price |
Same as above(和上面一样) |
id name, price |
Same as above(和上面一样) |
id score |
Return the "id" field and the score(返回id和分值) |
* |
Return all fields the each document has(返回所有字段) |
* score |
Return all fields each document has, along with the score(返回所有字段和分值) |
其它
defType: 指定query parser,常用defType=lucene,
defType=dismax,defType=edismax
timeAllowed: 指定需要在规定时间内查询半壁,单位是毫秒。
CoreQueryParameters
coreQueryParameters除了"wt"和"qt"这两个参数以外,还有两个用于输出调试信息的参数。
echoHandeler:输入选择的handler信息。
echoParams:输入提交参数。
今天先讲CommonQueryParameters和CoreQueryParameters这两类参数,明天笔者继续为大家讲解查询查询相关的知识。