加/减刻面导轨

时间:2013-06-28 00:03:52

标签: ruby-on-rails ruby solr sunspot

您好我是使用太阳黑子和solr的新铁轨开发人员。

这是我可搜索的块:

searchable do
  text :name, :boost => 10
  text :description
  text :tags do
    tags.map(&:name)
  end
  text :ingredients do
    ingredients.map(&:ingredient)
  end
  string :ingredients, :multiple => true do 
    ingredients.map(&:ingredient)
  end
  string :user
end

和我的控制员:

@search = Recipe.search do |query|
  query.fulltext params[:search]
  query.paginate(:page => params[:page] || 1, :per_page => 20)
end
@recipes = @search.results

我正在构建食谱搜索引擎。基本上,现在我已经拥有它,以便您可以搜索与食谱相关的配方,成分和标签的名称,并显示匹配的食谱。

但正如你所看到的那样,我也试图在成分上创建一个分面搜索,我已经制作了字符串。

我的目标是能够像现在一样搜索食谱,但是如果你添加一个加号然后添加一个成分,那么它将面向搜索,同样也会添加减号。例如,这是一个查询:

Chicken Piccata +lemon  => searches for chicken piccata with lemon
Chicken Piccata -lemon  => searches for chicken piccata without lemon

我一直在尝试这样的事情:

with(:ingredients, params[:ingredients]) if params[:ingredients].present?

但我不知道如何处理它的+/-方面。我怎么能做到这一点?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

不确定Sunspot查询创建,但.... Solr支持布尔运算符,因此支持NOT( - ),它将返回没有单词的结果。

所以Chicken Piccata lemon - >使用默认运算符AND时,应使用

返回所有结果

此外,Solr支持NOT运算符Chicken Piccata -lemon,将被解释为内容中没有柠檬的所有结果。

您还可以查询-ingredients:lemon,以排除结果。