如何仅获取solr rails中的选定列

时间:2014-11-21 12:11:27

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

我正在使用带有solr的rails

我想搜索用户,我的用户表有12个字段我的模式是用户

姓名,城市,州,图片,评论,状态,备注等......

在我的用户模型中

searchable do
    text :name, :city
end

当我使用

进行搜索时
@search = User.search do
    fulltext params[:search]
end
@users = @search.results

这将从数据库返回所有字段,但我只有三个字段名称,城市,状态如何使用solr搜索只获得三个字段。 怎么能实现这个?

3 个答案:

答案 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