Solr7.x学习 -- Solr查询参数

1、标准查询参数

参数 描述
q 标准关键字查询条件 例如 q=name:张三 AND address:北京,即为查询name字段值为张三且address为北京的索引数据
q.op 表示q 中 查询语句的 各条件的逻辑操作,取值AND(与) 、OR(或) 
df 默认的查询字段,一般默认指定,还没用过...

2 常用查询参数

参数 描述
defType

指定用于处理查询语句(q参数)的查询解析器,例如:defType=lucene

sort 排序方式  asc或者 desc例如: id asc即为按id升序排序
start 分页参数,起始页,默认是0
rows 分页参数,每页记录数,默认是10
fq 二次过滤的查询条件,返回同时满足q查询条件及fq查询条件的数据;例:q=name:张三&fq=age:[10 TO 20]则查询名称为张三且年龄在10到20岁之间的数据
fl 指定查询结果中返回的字段,需要在solr的core中该字段的stored=”true”或docValues=”true” ,例如::fl=id,title,name,则返回结果中只会返回id、title、name字段;
debug 指定查询结果中携带额外的调试信息,debug=timing:返回查询需要的时间,debug=query:返回与查询query 有关的调试信息;debug=results:返回与score有关的信息;debug=all:返回所有可用的调试信息,同 debug=true
explainOther 设置当debugQuery=true时,显示其他的查询说明.
timeAllowed 查询超时时间,单位毫秒。如果查询在指定的时间未完成,则只返回部分信息
segmentTerminateEarly Indicates that, if possible, Solr should stop collecting documents from each individual (sorted) segment once it can determine that any subsequent documents in that segment will not be candidates for the rows being returned. The default is false.(没看懂。。。)
omitHeader 设置是否忽略查询结果返回头信息,默认为“false”。
wt  writer type。指定查询输出结构格式,默认为“xml”。在solrconfig.xml中定义了支持的查询输出格式:xml、json、python、ruby、php、phps、custom。
logParamsList 控制solr记录哪些参数的日志。solr4.7开始,支持用参数控制日志范围。你可以将自己觉得重要的参数写到日志。 例如logParamsList=q,fq 就只有q和fq信息被记录到日志。 不记录日志则设置属性为空
echoParams

echoParams用来控制返回的responseHeader里包含哪些信息。explicit:默认值。包含所有指定的请求参数,再加上参数 _;all:包含所有对查询有用的参数,包含一些在solrconfig.xml中预定义的参数和 _;

none:不显示params的信息

3. 标准查询操作符

参数 描述
指定要查找的字段,比如:name:张三 AND age:20
匹配?所在位置的单一字符,比如:na?e匹配name
* 匹配0或多个字符,比如:tes*匹配test/testing/tester等以tes开始的搜索词
~ 基于编辑距离的模糊查询,比如:roam~1匹配和roam有一个单词不一样的其他词如foam,roams等,但不会匹配reams,因为reams与roam有两个词的差异,而roam~2则可以匹配reams;
~n 邻近查询,查找相隔一定距离的单词,比如:”jakarta apache”~10(相隔10个单词)
to 范围查询,{}不包含边界,[]包含边界,比如:num:{1 TO 10} 或者  age:[10 TO 20]
^ 加权因子,比如:jakarta^4 apache 查找结果中jakarta更相关
^= 指定查询语句的score得分为常量,比如:(description:blue OR color:blue)^=1.0 text:shoes
AND(&&) 逻辑与,AND两边结果均满足才符合要求
OR 逻辑或,OR两边有一边满足要求即可
NOT(!) 运算符后面的查询词不出现,比如”solr 7.4” NOT “Apache Lucene”
+ “+” 存在操作符,要求符号”+”后的项必须在文档相应的域中存在。 比如+jakarta lucene查询必须包含jakarta,而lucene可以出现可不出现
- 不能包含运算符后面的查询词 “vensy apache” -“Apache Lucene”
[] 包含范围边界
{} 不包含范围边界

4. 转义字符

 solr查询条件中对于如下字符需要进行转义:
    + - && || ! ( ) { } [ ] ^ " ~ * ? : /

Solr特殊字符转义提供了一个工具类org.apache.solr.client.solrj.util.ClientUtils

使用的时候只需调用ClientUtils.escapeQueryChars("test+tt")

例如:
   		SolrQuery params = new SolrQuery();
		params.set("q", "name:".concat(ClientUtils.escapeQueryChars("test:test")));

5. 查询语句中使用注释

solr的查询语句支持C语言格式的注释。
"normal query" /* 这里是注释内容 */ OR "vensy"

6. 时间和日期的表示

timestamp:[* TO NOW]
starttime:[1990-03-01T23:59:59.999Z TO *]
starttime:[1990-12-31T23:59:59.999Z TO 2018-08-02T00:00:00Z]
pubdate:[NOW-1YEAR/DAY TO NOW/DAY+1DAY]
createdate:[1990-08-01T23:59:59.999Z TO 2018-08-02T23:59:59.999Z+1YEAR]
createdate:[1990-03-01T23:59:59.999Z/YEAR TO 2018-03-06T23:59:59.999Z]

7. 查询语句中的局部参数

solr支持在基本查询语句中加入局部参数,
比如可以在 q=solr rocks 中加入参数以修改操作符和默认的查找字段:
q={!q.op=AND df=title}solr rocks
语法规定如下:
(1)以{!开始, 以}结束,后跟查询语法
(2)局部参数中为任意数量用空格分隔的key=value对

8. solr标准的查询解析与Lucene的查询解析的不同点如下:

  1. 范围查询场景下课使用*表示不限制,如age:[* TO 20] 表示查询20岁以下的索引数据
  2. 支持独立的否定查询 - ;
  3. 支持函数查询 ;
  4. 支持多种类型的查询解析器 
  5. 支持过滤器缓存 
  6. 范围查询、前缀查询和通配符查询都可以指定文档的score是常量

猜你喜欢

转载自blog.csdn.net/sxg0205/article/details/81317563
今日推荐