代码之家  ›  专栏  ›  技术社区  ›  Bogdan Gusiev

将条款草案从太阳黑子solr指数中排除

  •  4
  • Bogdan Gusiev  · 技术社区  · 14 年前

    我有一个名为article的索引模型,我不希望solr索引未发布的文章。

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

    如何指定未发布的文章?不应该被索引?

    3 回复  |  直到 12 年前
        1
  •  7
  •   Simone Carletti    14 年前

    请确保索引已发布的状态。

    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
    
        2
  •  7
  •   webmat    12 年前

    如果你想确保未发表的文章 从未 包含在搜索索引中,您可以这样做:

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

    模型只有在发布时才会被索引。

    如果您还希望管理员能够搜索文章(包括未发布的文章),我的方法就不那么有趣了。

    注:来电 article.index! 将实例添加到索引中,而不考虑 :if => :method 参数。

        3
  •  3
  •   Kunday    14 年前

    仔细研究sunspot_rails的代码库,可以发现一个名为 maybe_mark_for_auto_indexing 将添加到包括solr的模型中。您可以重写该方法并设置 @marked_for_auto_indexing 基于您在特定模型中的条件。它的猴子补丁,但可以帮助你解决问题。你参考的代码在 lib/sunspot/searchable.rb .