繁体   English   中英

用黑光选择多个面

[英]select multiple facets with blacklight

我正在尝试实现同一类别的多个方面的选择,因此当用户选择类别A的选项A1和选项A2以及类别B的选项B1时-他应该获得的结果是(A1 A2)AND(B1 )。
我正在使用solr和blacklight(v5.3.0)。
我尝试使用blacklight_advanced_search(v5.1.2)gem,并更改了高级视图。 我成功实现了该视图,但是solr返回的结果仍然是A1 AND A2 AND B1。

如何使Solr在同一类别的构面之间使用OR而不是AND?

谢谢

Solr 5.4.0; Ruby:2.2.4; Rails:4.2.6在这里,类别A =颜色和B = productBrand检查您的过滤器查询Fq的方式

fq = [{“!term f = color}蓝色”,“ {!term f = color}黑色”,“ {!term f = productBrand} Apple”]

但是在从https://github.com/sul-dlss/revs引用Blacklight示例后,它们的过滤器查询也看起来类似

“FQ”=> [ “((:-visibility_isi:[* TO *])OR visibility_isi:1)”, “{!原料F = format_ssim}黑色和白色的底片”,“{原料F = marque_ssim!}福特”,“ {!raw f = marque_ssim}雪佛兰”]

但它对我不起作用,以及blacklight_advanced_search --version问题

因此,我更改了request.rb文件-根据要求更改操作append_filter_query还要编辑catalog.rb

config.add_facet_field'productBrand',标签:'Brand',:tag =>'some-tag',:ex =>'some-tag'

config.add_facet_field'color',标签:'Color',:tag =>'color',:ex =>'color'

编辑文件后,我得到此fq,它正在按我希望的方式工作(类似于您的要求),选择蓝色或黑色,然后选择苹果

fq = [“ {!tag = color}颜色:(蓝黑色)”,“ {!tag = some-tag}产品品牌:(苹果)]

可能不是编辑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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM