Sunspot Solr处理布尔逻辑

时间:2014-05-12 20:26:59

标签: ruby-on-rails solr sunspot sunspot-rails sunspot-solr

太阳黑子可以处理具有AND和OR运算符的逻辑吗?

Sunspot正在使用dismax请求处理程序,其中minimum_match字段用于实现OR查询/ AND查询

现在问题是我们需要将AND和OR运算符组合在一起。如何实现同样的目标。

text = "Hot Air Balloon"

search = Video.solr_search, :minimum_match => text.size do
  fulltext text do
    fields :title
  end
end

我需要像HOT和AIR或BALLOON

这样的东西

3 个答案:

答案 0 :(得分:1)

如果您的文本组合数量有限,则可以使用any_of强制OR:

text1=["hot","air"]
text2=["balloon"]

search = Video.search do
    any_of do
        fulltext text1, fields: :title
        fulltext text2, fields: :title
    end
end

答案 1 :(得分:0)

不幸的是,any_of和all_of仅适用于标量字段(字符串,整数),不适用于全文搜索(请参阅文档,它在标量字段的上下文中说明了这两种方法)。如果要在一个字段上实现此类效果,则必须手动创建查询:

fulltext "Hot AND Air OR Balloon" do
    fields :title
end

它为您提供了对Solr的查询:

 q=Hot AND Air OR Balloon&qf=title&rows=1&start=0  

我没有测试过,但这也应该有效:

"+hot +air ballon"

' +'标志意味着该词是强制性的。 '气球'因为dismax的默认设置是' OR' operator(您可以在schema.xml,solrQueryParser节点中检查默认运算符的设置)。

答案 2 :(得分:0)

从版本2.2.0开始,sunspot_solr默认为edismax解析器,它支持使用AND,OR,NOT, - 和+的查询。

var test = 'http://stackoverflow.com/questions/ask';
var last = test.lastIndexOf('/');
var result = test.substr(0, last+1);

document.write(result);