2010-04-28 3 views
4

У меня есть индексированная модель, называемая статьей, и я не хочу, чтобы solr индексировал неопубликованные статьи.Исключить проектные статьи из индекса Solr с помощью Sunspot

class Article < ActiveRecord::Base 
    searchable do 
    text :title 
    text :body 
    end 
end 

Как я могу указать, что статья не опубликована? не следует индексировать?

ответ

7

Не забудьте проиндексировать опубликованный статус.

class Article < ActiveRecord::Base 
    searchable do 
    text :title 
    text :body 
    boolean :is_published, :using => :published? 
    end 
end 

Затем добавить фильтр к запросу

Sunspot.search(Article) do |search| 
    search.with(:is_published, true) 
    # ... 
end 
+0

В нашем случае это удвоит показатель Solr, потому что большинство статей остаются навсегда в нашей базе данных. Поэтому это решение неприемлемо для нас. –

+0

Hi Simone. Скажем, статья принадлежит категории, и может быть опубликована (целая) категория. Как вы просматриваете статьи, отфильтрованные по категориям? –

+0

@Fro_oo Я призываю вас открыть новый вопрос –

3

Небольшой взгляд в кодовой базе sunspot_rails раскрывает метод, называемый maybe_mark_for_auto_indexing, который будет добавлен к моделям, которые включают в Solr. Вы можете переопределить этот метод и установить @marked_for_auto_indexing на основе ваших критериев в конкретной модели. Его обезьяна исправления, но может помочь вам решить проблему. Код для ссылки на ur находится в lib/sunspot/searchable.rb.

+0

Да, это из неизданного кода. Ожидание 1,2. –

7

Если вы хотите, чтобы убедиться, что неопубликованные статьи являются никогда не включены в индекс поиска, вы можете сделать это таким образом, вместо этого:

class Article < ActiveRecord::Base 
    searchable :if => :published? do 
    text :title 
    text :body 
    end 
end 

модель будет индексироваться только на момент публикации.

Мой подход менее интересен, если вы также хотите, чтобы администраторы могли искать статьи, в том числе неопубликованные.

Примечание: вызов article.index! добавит экземпляр в индекс независимо от параметра :if => :method.

+0

Это должен быть ответ – aromero