solr学习日记···搜索-Query Parser(查询解析器)

前面提到,solr的查询请求在经过查询请求处理器后会经由查询解析器解析解释查询的术语和参数。这一节就来介绍一下查询解析器支持的通用查询参数和常用的查询解析器。
通用查询参数:
defType:指定处理的查询解析器。如果没有指定则默认由标准查询解析器处理。

sort:指定结果集排序。如果不指定,默认按照score desc排序,也就是solr评分的倒序排序。(score为solr的默认的字段,对于每个查询结果都有一个相关度评分)
sort的格式类似sql 字段名 asc|desc,如果有多个则以逗号分隔,如 inStock desc, price asc。

start:指定结果起始值。默认为零,也就是显示所有结果集。如果指定了某个数字,则表示从第几个结果开始显示。如 start=2,则从结果集中第二个结果开始显示。

row:指定最后显示的结果数。默认值是10,表示最后只显示结果集中的10个结果。

fq:过滤查询参数。过滤查询是对结果集的再次查询并且不会影响score字段。由于过滤查询独立于主查询缓存,对于提高复杂查询的效率很有用。
过滤查询的使用:

1.多查询参数
    fq=popularity:[10 TO *] & fq=section:0
    结果取两个查询结果的交集
2.使用布尔逻辑
    fq=+popularity:[10 TO *] +section:0

布尔逻辑:
1)必备词项:+ a , a AND b
  + 其后的词项必须出现在文档中
  and 两边的词项必须出现在文档中
2)可选词项:a OR b
  or 两边的词项有至少一个出现在文档中就可以,solr默认配置词项之间是or,
  所以这里也可以为a b
3)排除词项:a -b , a NOT b
  -,NOT 其后的词项不出现在文档中

由于每个过滤查询的结果集都独立缓存,所以根据实际情况选择将查询条件分开为两个fq查询还是结合为一条。

fl:指定显示结果的字段列表。默认为显示所有存储字段,包括_version_但不包括score。
eg:
*:默认值
*,score:默认显示加上score字段
id,time,score:显示id,time, score三个字段

debug:调试参数,默认不返回调试信息,可以指定以下几个值:

debug=query: 仅仅返回查询的调试信息

debug=timing: 返回查询处理时间的调试信息

debug=results: 返回有关评分结果(score)的调试信息

debug=all|true: 返回有关请求的所有可用的调试信息

explainOther:指定了一个查询返回查询文档的解释信息。前提是需要开启调试。
eg:
/solr/mycore1/select?debugQuery=on&indent=on&q=ch&wt=json&explainOther=id:93
查询结果
该查询中指定了explainOther的值为id:93,表示查询id为93的文档解释信息。返回结果中也显示了。如果不开启调试,则该参数不生效:
查询结果
wt:设置response writer,默认为json

几种查询解析器:
Standard Query Parser:标准查询解析器
DisMax Query Parser:主要用来处理简单短语的
下面介绍一下它可以支持的查询参数

q.alt:当查询参数q未指定或为空时,可指定该参数进行查询(此时使用DisMax解析器)。
       该参数未指定或为空即默认使用标准解析器查询
qf:引入了字段列表,并可以靠因子来改变字段在查询中匹配关键字的重要性
   eg:qf="fieldOne^2.3 fieldTwo fieldThree^0.4"
       根据上面的赋值来看,同样的关键字匹配,匹配到fieldOne字段中的文档的重要性要
   高于其它两个。换句话说,如果最后只有一个结果,那么会优先选择匹配到fieldOne
   字段的文档。
mm:在参数q中所有单词和短语都默认为可选子句,而mm参数则设定可选子句的最小匹配数量。
    eg:/select?defType=dismax&indent=on&mm=2&q=class_name:寒 秋 班
       对于上面的例子,q参数的查询关键字有三个子句,‘寒’ ‘秋’ ‘班’,而mm参数设定
    为2,也就是说在结果文档中必须匹配上述三个可选子句中的至少两个。
       需要注意的是如果mm设定的最小数量大于查询参数中的可选子句数目,那么就会认为
    查询参数中的所有可选子句都要匹配。

关于mm参数取值的一些注意事项可以点击这里

pf:一旦使用 fq 和 qf 参数确定了匹配文档的列表,可使用该参数修改文档的得分(score)。
   格式与qf相同。
dq:类似于fq,指定了一个可选的查询子句加入到主查询中。与fq参数不同的是不会影响最后的
   查询结果,而是提升匹配文档的分数。

以上只是部分已经理解的参数,还有一些暂时不够理解的参数没有列出来。有兴趣的可以点击这里查看更多。

猜你喜欢

转载自blog.csdn.net/qq_19656425/article/details/79472317