Solr 查询语法

来源:互联网 发布:淘宝上的消字灵管用吗 编辑:程序博客网 时间:2024/06/03 06:38

摘要: 默认的Solr查询语法扩展了Lucene的语法,其目的也就是检索索引。

basic query

Solr的查询用到了参数q,标准的查询语法就想下面这样:
http://localhost:8983/solr/query?q=test
可以使用debug=query来分析查询过程:
http://localhost:8983/solr/query?q=test&debug=query

{  "responseHeader":{    "status":0,    "QTime":0,    "params":{      "q":"hello",      "debug":"query"}},  "response":      {"numFound":0,"start":0,"docs":[]  },  "debug":{    "rawquerystring":"hello",    "querystring":"hello",    "parsedquery":"text:hello",        "parsedquery_toString":"text:hello",    "QParser":"LuceneQParser"}}

一般来说,response会包含匹配程度最好的文档,但是上面例子中,没有文档满足这一查询。
在debug信息中,可以看到是如何解析查询语句的:查询的主体是hello,查询的字段是text

一般来说,查询会指定在哪个字段查询,语法:

title:China

表示的意思是查询title字段包含China信息。

phrase query

短语查询是需要满足多个查询词组。

text:"Air China"

这样的话,查询到的结果必须包含Air China这样的词组,如果标题中只有Air Liquide China是不会匹配到的。

proximity query

临近查询有点像短语查询的扩充,允许干扰项出现在所查询的词组之间。

text:"bank of china"~2

如果这样的话,不仅可以匹配到Bank of China这样的词组,还会匹配central bank system of chinabank institution of china这样的短语。

Boolean query

布尔查询可以包含多条查询语句,可以使查询条件是可选的、必须的、禁止的。

solr search

默认的查询操作符是OR,也就是说是可选的。那么text中包含solr或包含search都满足查询语句。
可以使用一些操作符来实现布尔查询,例如+AND表示必须的,-NOT表示禁止的,OR表示可选的。

+solr +search example -test

可以认为返回的结果必须包含solrsearch,不能出现test,有没有exapmle无所谓。
下面这种写法表达的是相同的意思:
solr AND search OR exapmle NOT test

boosted query

提升查询需要用到操作符^,该查询不会影响到查询结果的数量,只会改变相关性,影响结果的排序。

text:solr^10 text:rockstext:(solr^10 rocks)(inStock:true AND text:solr)^123.45 text:hi

Range query

范围查询需要选定一定范围的文档,查询可以作用于数字类型、日期类型、字符串类型。

age:[18 TO 30]       // 匹配 age 在18-30 之间(包含 18 和 30 )  age:[18 TO 30}       // 匹配 age 在18-30 之间(包含 18 不含 30 )  age:[65 TO *]        // 匹配 age 大于 65  age:[* TO *]         // 匹配所有含有age字段的文档

constant score query

常数得分查询有点像布尔查询,只是该查询需要左右的文档有相同的得分,查询需要用到操作符^=

+color:blue^=1 text:shoes

filter query

过滤查询需要用到fiter chche,返回的结果都来自缓存,但是由于score 不会缓存,所以满足查询条件的文档得分都是0,不过该查询请求响应会很快(来自缓存)。

description:HDTV OR filter(+promotion:tv +promotion_date:[NOW/DAY-7DAYS TO NOW/DAY+1DAY])

这里用到了filter()语法。

query comments

可以使用像C语言一样的注释语法给solr的查询语法添加注释。语法如下:

/* comments */

一个例子:
description:HDTV /* TODO: +promotion:tv +promotion_date:[NOW/DAY-7DAYS TO NOW/DAY+1DAY] */

0 0