一、查询参数说明
再做solr查询的时候,solr提供了很多参数来扩展它自身的强大功能,比如一下常用参数:
q 查询字符串,如果是查询所有:*:*,如果根据指定字段查询:Name:张三 AND Address:上海
fq 过滤查询(filter query),作用在q查询符合结果中同时是fq查询符合的,如:q=Name:张&fq=CreateDate:[20080101 TO 20090101]
查询Name是张,并且CreateDate是在2008年1月1日和2009年1月1日之间的数据。
fl 指定返回哪些字段内容,用逗号或者空格分隔多个。索引显示那些field(*表示所有field,如果查询指定字段用逗号或者空格隔开,如:
Name,SKU,ShortDescription或Name SKU ShortDescription)注:字段是严格区分大小写。
start 返回第一条记录在完整找到结果中的偏移位置,0表示开始,一般用作分页
rows 指定返回结果中最多有多少条记录,配合start来实现分页。
sort 排序。格式:sort=<field name>+<desc|asc> [ ,<field name>+<desc|asc>]...。如:score desc,price asc 表示先sore降序再price升序,
默认是相关性降序。
wt 指定输出格式(writer type),有xml、json、php、phps
q.op 表示q中查询语句的各条件的逻辑操作AND(与)、OR(或)
hl 是否高亮,如hl=true
hl.fl 高亮field,如hl.fl=Name
hl.snippets 默认是1
hl.simple.pre 高亮前面的格式
hl.simple.post 高亮后面的格式
facet 是否启动统计
facet.field 统计field
二、Solr运算符
1、":" 指定字段查指定值,如果返回所有值:*:*
2、"?" 表示单个任意字符的通配
3、"*" 表示多个任意字符的通配(不能在检索的项开始使用 * 或者 ? 符号)
4、"~" 表示模糊检索,如检索拼写类似于"roam"的项时,这样写:roam~ 将找到形如 froam 和roams 的词;roam~0.8,检索返回相似度在
0.8以上记录。临近检索,如检索相隔10个单词的"apache"和"jakarta" ,"jakarta apache" ~10。
5、"^" 控制相关度检索,如检索jakarta apache ,同时希望去让 jakarta 的相关度更加好,那么在其后加上"^" 符号和增加量,即jakarta ^4 apache
6、布尔操作符AND、||、OR、&&,not、!、-(排除操作符不能单独与项使用构成查询)
7、"+" 存在操作符,要求符号"+"后的项必须在文档相应的域中存在
8、() 用于构成子查询
9、[] 包含范围检索,如检索某段时间记录,包含头尾:date:[20080101 TO 20090101]
10、{} 不包含范围检索,如检索某段时间记录,不包含头尾:date:{20080101 TO 20090101}
11、/ 转义操作符,特殊字符包括:+-&&||!(){}[]^"~*?:/
注:+ - 表示对单个查询单元的修饰,and or not 是对两个或多个查询单元做交集或者差集还是取反的操作符号。
如:AB:china+AB:america 表示AB:china忽略不计,可有可无,必须满足第二个条件才是对的,而不是两条件都满足
如果是:AB:china AND AB:america,解析出来的结果是两条件都必须满足,即:+AB:china AND +AB:america 或
+AB:china + AB:america
总而言之,查询语法:修饰符 字段名:查询关键词 AND/OR/NOT 修饰符 字段名:查询关键词
三、Solr查询语法
1、最普通的查询,如查询姓张的人:Name:张,如果是精准搜索相当于SQL语句中的LIKE搜索,需要加引号(""),如:Address:"北京"
2、多条件查询,注:如果的针对单个字段进行搜索,可以用(Name:搜索条件+运算符(OR、AND、NOT)Name:搜索条件),如:
模糊查询:Name:张 OR Name:李,单个字段多条件查询不建议这样写,一般建议是在单个字段里进行条件筛选,如:Name:张 OR 李,
多个字段查询:Name:张 + Address:北京
3、排序,比如根据姓名升序:Name asc ,降序:Name desc