solr的一些查询语法

1. 基本查询概念

1.1 字段查询

首先假设我的数据里 fields 有:name, tel, address
预设的搜寻是 name 这个字段,如果要搜寻的数据刚好就是 name 这个字段,就不需要指定搜寻字段名称。

1.2 查询规则

如欲查询特定字段(非预设字段),请在查询词前加上该字段名称加 “:” 符号,例如:

  • address:北京市海淀区上地软件园
  • tel:88xxxxx1

1.3 查询参数说明

  1. q 代表 query input
  2. version 代表 solr 版本(建议不要变动此变量)
  3. start 代表显示结果从哪一笔结果资料开始,预设为 0 代表第一笔
  4. rows 是说要显示几笔数据,预设为 10 笔

因为有时查询结果可能有几百笔,但不需要显示所有结果,所以预设是从第一笔开始到第十笔。

所以若要显示第 10 到 30 笔就改为:

1
http://localhost:8080/solr/select/?indent=on&version=2.2&q=address:北京市海淀区上地软件园+tel:88xxxxx1&version=2.2&start=10&rows=20&indent=on

(indent 代表输出的 xml 要不要缩行,预设为开启 on)

1.4 输出字段限定

要限定输出结果的内容可用 “fl=” 加上你要的字段名称,如以下这个范例:

1
http://localhost:8080/solr/select/?indent=on&version=2.2&q=text:北京+OR+text:亿度&start=0&rows=10&fl=name,address,tel

在 fl= 之后加上了 name, address, tel

2. 查询参数

常用参数

  • 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=trueon 开启,一般调试 json, php, phps, ruby 输出才有必要用这个参数。
  • version - 查询语法的版本,建议不使用它,由服务器指定默认值。

3. Solr 的检索运算符

基本运算符

  • “:” 指定字段查指定值,如返回所有值 *:*
  • “?” 表示单个任意字符的通配
  • “*” 表示多个任意字符的通配(不能在检索的项开始使用 * 或者 ? 符号)
  • “~” 表示模糊检索,如检索拼写类似于 “roam” 的项这样写:roam~ 将找到形如 foam 和 roams 的单词;roam~0.8,检索返回相似度在 0.8 以上的记录。

邻近检索

如检索相隔 10 个单词的 “apache” 和 “jakarta”:"jakarta apache"~10

相关度控制

“^” 控制相关度检索,如检索 jakarta apache,同时希望去让 “jakarta” 的相关度更加好,那么在其后加上 “^” 符号和增量值,即 jakarta^4 apache

布尔操作符

  • AND、&& 布尔操作符 AND
  • OR、|| 布尔操作符 OR
  • NOT、!、- 布尔操作符 NOT(排除操作符不能单独与项使用构成查询)
  • “+” 存在操作符,要求符号 “+” 后的项必须在文档相应的域中存在
  • ( ) 用于构成子查询

范围查询

  • [ ] 包含范围检索,如检索某时间段记录,包含头尾:date:[200707 TO 200710]
  • { } 不包含范围检索,如检索某时间段记录,不包含头尾:date:{200707 TO 200710}

时间范围查询示例

1
2
3
4
5
6
timestamp:[* TO NOW]
createdate:[1976-03-06T23:59:59.999Z TO *]
createdate:[1995-12-31T23:59:59.999Z TO 2007-03-06T00:00:00Z]
pubdate:[NOW-1YEAR/DAY TO NOW/DAY+1DAY]
createdate:[1976-03-06T23:59:59.999Z TO 1976-03-06T23:59:59.999Z+1YEAR]
createdate:[1976-03-06T23:59:59.999Z/YEAR TO 1976-03-06T23:59:59.999Z]

转义操作符

“" 转义操作符,特殊字符包括:

1
+ - & ! ( ) { } [ ] ^ " ~ * ? : \
© 2025 Solr Community of China All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero