Solr的学习使用之(七)Solr高级查询facet、facet.pivot简介
本帖最后由 edcf 于 2014-1-20 08:44 编辑1、什么是Faceted Search
Facet['f?s?t]很难翻译,只能靠例子来理解了。Solr作者Yonik Seeley也给出更为直接的名字:导航(Guided Navigation)、参数化查询(Paramatic Search)。
上面是比较直接的Faceted Search例子,品牌、产品特征、卖家,均是Facet。而Apple、Lenovo等品牌,就是Facet values或者说Constraints,而Facet values所带的统计值就是Facet count/Constraint count。
2、Facet使用
q = 超级本
facet = true
facet.field = 产品特性
facet.field = 品牌
facet.field = 卖家http://…/select?q=超级本&facet=true&wt=json&facet.field=品牌&facet.field=产品特性&facet.field=卖家
也可以提交查询条件,设置fq(filter query)。
q = 电脑
facet = true
fq = 价格:
facet.mincount = 1 // fq将不符合的字段过滤后,会显示count为0
facet.field = 产品特性
facet.field = 品牌
facet.field = 卖家http://…/select?q=超级本&facet=true&wt=json&fq=价格:&facet.mincount=1&facet.field=品牌&facet.field=产品特性&facet.field=卖家"facet_counts": {"facet_fields": {"品牌": [ "Apple", 4, "Lenovo", 39"产品特性": [ "显卡", 42, "酷睿", 38
…}}如果用户选择了Apple这个分类,查询条件中需要添加另外一个fq查询条件,并移除Apple所在的facet.field。
http://…/select?q=超级本&facet=true&wt=json&fq=价格:&fq=品牌:Apple&facet.mincount=1&facet.field=品牌&facet.field=产品特性&facet.field=卖家
3、Facet参数
facet.prefix –限制constaints的前缀
facet.mincount=0 – 限制constants count的最小返回值,默认为0
facet.sort=count – 排序的方式,根据count或者index
facet.offset=0 –表示在当前排序情况下的偏移,可以做分页
facet.limit=100 – constraints返回的数目
facet.missing=false – 是否返回没有值的field
facet.date – Deprecated, use facet.range
facet.query
指定一个查询字符串作为Facet Constraint
facet.query = rank:[* TO 20]facet.query = rank:
"facet_counts": {"facet_fields": {"品牌": [ "Apple", 4, "Lenovo", 10 …]"产品特性": [ "显卡", 11, "酷睿", 20 …] …}}
facet.range
http://…/select?&facet=true&facet.range=price&facet.range.start=5000&facet.range.end=8000&facet.range.gap=1000 <result numFound="27" ... /> ... <lst name="facet_counts"> <lst name="facet_queries"> <int name="rank:[* TO 20]">2</int> <int name="rank:">15</int> </lst>...
WARNING: range范围是左闭右开,facet.pivot
这个是Solr 4.0的新特性,pivot和facet一样难理解,还是用例子来讲吧。
Syntax: facet.pivot=field1,field2,field3...e.g. facet.pivot=comment_user, grade
#docs#docs grade:好#docs 等级:中#docs 等级:差
comment_user:110811
comment_user:2201820
comment_user:3151221
comment_user:4181521
"facet_counts":{
"facet_pivot":{
"comment_user, grade ":[{
"field":"comment_user",
"value":"1",
"count":10,
"pivot":[{
"field":"grade",
"value":"好",
"count":8}, {
"field":"grade",
"value":"中",
"count":1}, {
"field":"grade",
"value":"差",
"count":1}]
}, {
"field":" comment_user ",
"value":"2",
"count":20,
"pivot":[{
…
没有pivot机制的话,要做到上面那点可能需要多次查询:
http://...q=comment&fq=grade:好&facet=true&facet.field=comment_userhttp://...q=comment&fq=grade:中&facet=true&facet.field=comment_userhttp://...q=comment&fq=grade:差&facet=true&facet.field=comment_userFacet.pivot - Computes a Matrix of Constraint Counts across multiple Facet Fields. by Yonik Seeley.上面那个解释很不错,只能理解不能翻译。
页:
[1]