我正在尝试实现同一类别的多个方面的选择,因此当用户选择选项A1和类别A的选项A2以及类别B的选项B1时 - 他应该获得的结果是(A1 或 A2)和(B1)。
我正在使用solr和blacklight(v5.3.0)
我尝试使用blacklight_advanced_search(v5.1.2)gem并更改了高级视图。我成功实现了该视图,但仍然是solr返回的结果是A1 AND A2和B1。
如何让solr在相同类别的方面之间使用 OR 而不是AND?
感谢
答案 0 :(得分:1)
Solr 5.4.0;红宝石:2.2.4;导轨:4.2.6 强> 这里的类别A =颜色,B = productBrand 检查你的过滤器查询fq 对我来说,最初的
fq = [{"!term f = color} Blue"," {!term f = color} Black"," {!term F = productBrand}苹果"]
但在引用https://github.com/sul-dlss/revs中的Blacklight示例后 他们的过滤查询看起来也很相似
" fq" => ["((: -visibility_isi:[* TO *])或visibility_isi:1)",&# 34; {生! f = format_ssim}黑白底片"," {!raw f = marque_ssim}福特", " {!raw f = marque_ssim}雪佛兰"]正在运作
但它对我不起作用,而blacklight_advanced_search --version问题
所以,我更改了 request.rb 文件 - 根据要求更改操作 append_filter_query 另请编辑catalog.rb
config.add_facet_field' productBrand',标签:'品牌' ,:tag => ' some-tag',:ex => '一些标签' 强>
config.add_facet_field' color',label:' Color' ,:tag => ' color',:ex => '颜色' 强>
编辑文件后,我得到了这个fq,它正如我想要的那样工作 (类似于你的要求)选择Blue或Black和Apple
fq = [" {!tag = color}颜色:(蓝黑色)", " {!标签=一些标签} productBrand:(苹果)] 强>
可能不是编辑request.rb的好方法,但无法找到替代方法
请参阅 \ ruby \ gems \ 2.2.0 \ gems \ blacklight-6.0.2 \ lib \ blacklight \ solr
中的request.rbREF:的 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