Solr默认有三种查询解析器(Query Parser):

  • Standard Query Parser
  • DisMax Query Parser
  • Extended DisMax Query Parser (eDisMax)

第一种是标准的Parser,最后一种是最强大的。

本文中所提到的参数并不能包含Solr所有参数,具体的使用和更详细的参数请参考官方文档。

常用参数

  • defType 选择查询解析器类型,例如dismax, edismax
  • q 主查询参数(field_name:value)
  • sort 排序,例如score desc,price asc
  • start 起始的数据偏移offset,用于分页
  • raws 一次返回的数量,用于分页
  • fq filter query 返回结果的过滤查询
  • fl fields to list 返回的字段(*, score)
  • debug 返回调试信息,debug=timing,debug=results
  • timeAllowed 超时时间
  • wt response writer返回的响应格式

下面是DisMax Parser可以使用的:

  • qf query fields,指定查询的字段,指定solr从哪些field中搜索,没有值的时候使用df
  • mm 最小匹配比例
  • pf phrase fields
  • ps phrase slop
  • qs query phrase slop

结果高亮:

  • hl 是否高亮 ,如hl=true
  • hl.fl 高亮field ,hl.fl=Name,SKU
  • hl.snippets 默认是1,这里设置为3个片段
  • hl.simple.pre 高亮前面的格式 
  • hl.simple.post 高亮后面的格式 

facet统计:

  • facet 是否启动统计 
  • facet.field  统计field 

Solr运算符

  • : 指定字段查指定值,如返回所有值:
  • ? 表示单个任意字符的通配
  • * 表示多个任意字符的通配(不能在检索的项开始使用*或者?符号)
  • ~ 表示模糊检索,如检索拼写类似于”roam”的项这样写:roam~将找到形如foam和roams的单词;roam~0.8,检索返回相似度在0.8以上的记录。
  • 邻近检索,如检索相隔10个单词的”apache”和”jakarta”,"jakarta apache"~10
  • ^ 控制相关度检索,如检索”jakarta apache”,同时希望去让”jakarta”的相关度更加好,那么在其后加上^符号和增量值,即jakarta^4 apache
  • 布尔操作符AND||
  • 布尔操作符OR&&
  • 布尔操作符NOT!-(排除操作符不能单独与项使用构成查询)
  • + 存在操作符,要求符号”+”后的项必须在文档相应的域中存在
  • ( )用于构成子查询
  • [] 包含范围检索,如检索某时间段记录,包含头尾,date:[200707 TO 200710]
  • {} 不包含范围检索,如检索某时间段记录,不包含头尾date:{200707 TO 200710}
  • / 转义操作符,特殊字符包括 + - && || ! ( ) { } [ ] ^ ” ~ * ? : /

注意: “+”和”-“表示对单个查询单元的修饰,and 、or 、 not 是对两个查询单元是否做交集或者做差集还是取反的操作的符号。

比如:AB:china +AB:america ,表示的是AB:china忽略不计可有可无,必须满足第二个条件才是对的,而不是你所认为的必须满足这两个搜索条件

如果输入:AB:china AND AB:america ,解析出来的结果是两个条件同时满足,即+AB:china AND +AB:america或+AB:china +AB:america