2014-11-21 20 views
1

我使用導軌和Solr的如何Solr的軌道只獲取所選列

我想在用戶搜索和我的user表中有12場我的模式是用戶

名稱,城市,州,圖像,評論,狀態,注意等等

在我的用戶模型

searchable do 
    text :name, :city 
end 

當我使用搜索

@search = User.search do 
    fulltext params[:search] 
end 
@users = @search.results 

這將返回我從數據庫的所有領域,但我只會通過三個字段名稱,城市,州如何才能獲得只有三個領域使用索爾搜索。 怎麼能做到這一點?

回答

0

我不確定爲什麼你會這樣做,但無論如何,你可以使用@search.hits而不是@search.results並使用ID加載任何你想要的東西。

0

當您撥打@search.results時,sunspot會加載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 
0

你的數據可以在架構

<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"/> 

現在只能通過copiedfield搜索

編輯

你可以做的另一種方式在每個單獨列中尋找,但這種方式比copyField