因为 Solr 内部实现查询语句的语法语义分析使用比较成熟的工具 Javacc,因此 Solr 支持的查询语法仍是很丰富的,Solr 查询语法能够总结以下:php
Solr 查询不管是 Solrj 操做仍是直接发送请求给 Solr 服务器,原理都是同样的,本质上都是发送 http 请求给 Solr 服务器,不过与 Solrj 操做 Solr 服务器不一样,Solr 查询能够按照各类各样的形式返回结果,好比重要的 Json 格式,能够实现 Ajax 动态显示数据效果。html
首先说一下 Solr 查询语法的特色(就是普通的 get 请求,k=v)apache
1、当 k 是 q 的时候,表示查询条件,具体咱们来看看这个 k 的 v 怎么写? 假设咱们已经为三个 filed (name,addr,tel,time)创建了索引,咱们应该怎么查询咱们想要的数据呢?json
1:指定域查询 域名:加上查询条件(好比 name:clebeg) 也能够指定所有 用关键词 allruby
二 、查询参数服务器
<!-- lang: html --> 经常使用 q – 查询字符串,必须的。 fl – 指定返回那些字段内容,用逗号或空格分隔多个。 start – 返回第一条记录在完整找到结果中的偏移位置,0开始,通常分页用。 rows – 指定返回结果最多有多少条记录,配合start来实现分页。 sort – 排序,格式:sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]… 。示例:(inStock desc, price asc)表示先 “inStock” 降序, 再 “price” 升序,默认是相关性降序。 wt – (writer type)指定输出格式,能够有 xml, json, php, phps, 后面 solr 1.3增长的,要用通知咱们,由于默认没有打开。 fq – (filter query)过虑查询,做用:在q查询符合结果中同时是fq查询符合的,例如:q=mm&fq=date_time:[20081001 TO 20091031],找关键字mm,而且date_time是20081001到20091031之间的。官方文档:http://wiki.apache.org/solr/CommonQueryParameters 不经常使用 q.op – 覆盖schema.xml的defaultOperator(有空格时用”AND”仍是用”OR”操做逻辑),通常默认指定 df – 默认的查询字段,通常默认指定 qt – (query type)指定那个类型来处理查询请求,通常不用指定,默认是standard。 其它 indent – 返回的结果是否缩进,默认关闭,用 indent=true|on 开启,通常调试json,php,phps,ruby输出才有必要用这个参数。 version – 查询语法的版本,建议不使用它,由服务器指定默认值。 [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} ” 转义操做符,特殊字符包括+ – & | ! ( ) { } [ ] ^ ” ~ * ? : “