Solr 5.4.0;红宝石:2.2.4;Rails:4.2.6
这里 category A=color 和 B=productBrand 检查你的过滤器如何查询 fq 对我来说,初始
fq = [{"!term f=color}Blue","{!term f=color}Black","{!term f=productBrand}Apple"]
但是在参考了https://github.com/sul-dlss/revs中的Blacklight 示例后,
他们的过滤器查询看起来也很相似
"fq"=>["(( : -visibility_isi:[* TO *]) OR visibility_isi:1)", "{!raw f=format_ssim}黑白底片", "{!raw f=marque_ssim} Ford", "{!raw f=marque_ssim}Chevy"] 正在工作
但它对我不起作用,而且 blacklight_advanced_search --version 问题
所以,我更改了request.rb文件——根据要求更改操作append_filter_query还编辑 catalog.rb
config.add_facet_field 'productBrand', label: 'Brand' , :tag => 'some-tag', :ex => 'some-tag'
config.add_facet_field 'color', label: 'Color' , :tag => 'color', :ex => 'color'
编辑文件后,我得到了这个 fq,它按我想要的方式工作(类似于你的要求)选择蓝色或黑色和苹果
fq=["{!tag=color}color:(Blue Black)", "{!tag=some-tag}productBrand:(Apple)]
可能不是编辑 request.rb 的好方法,但无法找到替代方法
请参阅\ruby\gems\2.2.0\gems\blacklight-6.0.2\lib\blacklight\solr中的 request.rb
参考:http: //yonik.com/multi-select-faceting/
示例代码:
def append_filter_query(query)
#$facet_value=query
unless query.nil?
$r= /.*}(.*)/.match(query)[1]
$l=/^({.*})/.match(query)[1]
if self['fq'].empty?
ampati()
else
$flag_new=false
self['fq'].each{|item|
$s=/.*}(.*\w)*:/.match(item)[1]
unless $l.include? $s
#$s=color
$flag_new=true
else
$flag_new=false
end
}
if $flag_new
ampati()
else
self['fq'].map!{|item|
$fac=/.*}(.*\w)*:/.match(item)[1]
if $l.include? $fac
item=/(.*\w)/.match(item)[1]<<" "<<$r<<")"
else
item
end
}
end
end
end
end
def ampati()
if $l.include? "color"
$c="{!tag=color}color:("<<$r<<")"
self['fq']<<$c
end
if $l.include? "productBrand"
$e="{!tag=some-tag}productBrand:("<<$r<<")"
self['fq']<<$e
end
end