使用blacklight

时间:2016-01-20 12:42:19

标签: ruby-on-rails ruby-on-rails-4 solr ruby-on-rails-plugins blacklight

我正在尝试实现同一类别的多个方面的选择,因此当用户选择选项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?

感谢

1 个答案:

答案 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.rb

REF:的 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