0

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

如何让 solr在同一类别的方面之间使用OR而不是 AND?

谢谢

4

1 回答 1

1

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
于 2016-04-07T14:48:37.290 回答