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查询语法,未来会慢慢补充。