2014-11-21 3 views
1

Я использую рельсы с SolrКак извлечь только выбранные столбцы в Solr рельсах

Я хочу, чтобы искать на пользователе и моей таблицей пользователя есть 12 поле моего режим User

имя, город, штат, изображение , комментарии, статус, обратите внимание, и т.д. ...

в моей модели пользователя

searchable do 
    text :name, :city 
end 

когда я поиск с помощью

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

Это вернет мне все поле из базы данных, но у меня только три имени поля, города, состояния, как я могу получить только три поля, используя поиск solr. Как это можно достичь?

ответ

0

Я не уверен, почему вы это сделаете, но в любом случае вы можете использовать @search.hits вместо @search.results и загружать все, что хотите, с помощью идентификаторов.

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

EDIT

вы можете сделать еще один способ быть в поиске только каждого столбца, но этот способ является медленным, чем copyField

Смежные вопросы