我正在使用带有solr的rails
我想搜索用户,我的用户表有12个字段我的模式是用户
姓名,城市,州,图片,评论,状态,备注等......
在我的用户模型中
searchable do
text :name, :city
end
当我使用
进行搜索时@search = User.search do
fulltext params[:search]
end
@users = @search.results
这将从数据库返回所有字段,但我只有三个字段名称,城市,状态如何使用solr搜索只获得三个字段。 怎么能实现这个?
答案 0 :(得分:0)
我不确定你为什么会这样做,但无论如何你可以使用@search.hits
代替@search.results
并使用id加载你想要的任何内容。
答案 1 :(得分:0)
当您调用@search.results
时,太阳黑子会从SQL数据库中加载所有匹配的记录。
如果您想避免访问SQL数据库,可以在Solr中存储所需的字段。您需要更新可搜索的定义
searchable do
text :name, stored: true
text :city, stored: true
end
然后重新索引模型User.reindex
。然后,您可以查询您的数据,如
@search = User.search do
fulltext params[:search]
end
@users = @search.hits.each do |hit|
puts "#{hit.stored(:name)} #{hit.stored(:city)}"
end
答案 2 :(得分:0)
你可以在Schema
中完成<field name="name" type="string" indexed="false" stored="true"/>
<field name="city" type="string" indexed="false" stored="true"/>
<field name="state" type="string" indexed="false" stored="true"/>
<field name="copiedfield" type="string" indexed="true" stored="false" multiValued="true"/>
现在您想要搜索所有字段,将使用copyField标记的源值设置为从源字段复制到dest 示例架构:
<copyField source="name" dest="copiedfield"/>
<copyField source="city" dest="copiedfield"/>
<copyField source="state" dest="copiedfield"/>
现在您只能按复制字段搜索
编辑
你可以用另一种方式单独搜索每一列,但这种方式比copyField
慢