Solr的一些查询语法

Solr是一款基于Apache Lucene服务器的开源的搜索引擎,它支持分词切割,官方的描述是

Solr is highly reliable, scalable and fault tolerant, providing distributed indexing, replication and load-balanced querying, automated failover and recovery, centralized configuration and more. Solr powers the search and navigation features of many of the world’s largest internet sites.

作为一款开源的软件,其功能之强大,配置之灵活,用于搜索业务再好不过。不过今天在这里要扯的不是怎么配置Solr,而是Solr查询过程中的一些语法。

关键字匹配

查询匹配title字段中值为”foo”的对象

1
title:foo

查询匹配title字段中值为”foo bar”的对象

1
title:"foo bar"

查询匹配title字段中值为”foo bar”,并且body字段中值为”quick fox”的对象

1
title:"foo bar" AND body:"quick fox"

查询同时满足title字段中值为”foo bar”以及body字段中值为”quick fox”的对象,或者查询title字段中值为”fox”的对象

1
(title:"foo bar" AND body:"quick fox") OR title:fox

查询匹配title字段中的值既包含”foo”关键字又不包含”bar”关键字的单对象

1
title:foo -title:bar

模糊查询

查询title字段中任何以”foo”开头的单词

1
title:foo*

查询title字段中任何以”foo”开头并且以”bar”结尾的单词

1
title:foo*bar

注意,Lucene不支持以*作为开头的值的查询。

范围查询

查询Price字段中价格位于200到300之间的对象

1
Price:[200 TO 300]

查询Price字段中价格低于200的对象

1
Price:[* TO 200]

查询Price字段中价格高于300的对象

1
Price:[300 TO *]

查询参数

参数fl(field list)指定了返回结果字段。例如,http://localhost:8080/solr/core/select?q=*:*&fl=id,name,score

参数fq(filter query)指过滤查询,有点类似于q查询,但是两者还是有差别的。StackOverflow上给出的建议是

It’s preferable to use Filter Query over normal Query wherever possible.
FilterQuery is able to take advantage of the FilterCache, which would be a huge performance boost in comparison to your querie
当然,还有其它的差别有待于发掘

总结

以上的内容并不是全部的Solr查询语法,未来会慢慢补充。

avatar

chilihotpot

You Are The JavaScript In My HTML