您好我是使用太阳黑子和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?
但我不知道如何处理它的+/-方面。我怎么能做到这一点?
感谢您的帮助!
答案 0 :(得分:1)
不确定Sunspot查询创建,但.... Solr支持布尔运算符,因此支持NOT( - ),它将返回没有单词的结果。
所以Chicken Piccata lemon
- >使用默认运算符AND时,应使用
此外,Solr支持NOT运算符Chicken Piccata -lemon
,将被解释为内容中没有柠檬的所有结果。
您还可以查询-ingredients:lemon
,以排除结果。