我试图实现同一类别的多个方面的选择,因此当用户选择类别A的选项A1和选项A2以及B类的选项B1时,他应该得到的结果是(A1 或 A2)和(B1)。
我正在使用solr和blacklight (5.3.0版)。
我尝试使用blacklight_advanced_search (v5.1.2) gem,并更改了高级的视图。我成功地实现了该视图,但是solr返回的结果仍然是A1 、 A2和B1。
如何使solr在同一类别的各方面之间使用或,而不是和?
谢谢
发布于 2016-04-07 14:48:37
Solr 5.4.0;Ruby2.2.4;Rails:4.2.6这里分类为A=color和B=productBrand检查如何为我检查过滤器查询fq
fq ={“!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 --版本问题
因此,我修改了request.rb文件
config.add_facet_field‘产品品牌’,标签:‘品牌’,:标签=>‘s-tag’,:ex =>‘s-tag’ config.add_facet_field 'color',标签:'color',:tag => 'Color‘,:ex => 'color'
编辑完文件后,我得到了这个fq,它可以按我的要求工作(类似于您的要求),选择Blue或Black和Apple
"{!tag=some-tag}productBrand:(Apple) fq=“{!tag=color}color:(蓝色黑色)”
可能不是编辑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
endhttps://stackoverflow.com/questions/34900392
复制相似问题