acts_as_searchable is one of the most useful plugins which's enabling us to add a fulltext search feature to our models/resources easily.

Unfortunately, it is lacking an interface to the features of searching by similarity provided by HyperEstraier.

So I wrote some codes to add an interface to exploit it. This is acts_as_searchable_with_similarity.

How to use?

Here is an example.

app/models/article.rb

   1  class Article < ActiveRecord::Base
   2    acts_as_searchable
   3  end
   4  
   5  Article.similarity_search(target_article,  :limit => 5)

posted by Png genki on Thu 29 Nov 2007 at 23:37

acts_as_searchable は、 HyperEstraier を使って簡単に全文検索を行うことができる、 非常に便利なRailsプラグインです。 しかし、HyperEstraierが提供する類似検索機能を使うインターフェイスが 用意されていないようだったので、類似検索機能を付け足しました。

オリジナルの acts_as_searchable に対する差分はこちらにあります。

使い方

まずは、オリジナルと同様に検索対象のモデルに acts_as_searchableを書き加えます。 必要に応じて適切なオプションを指定してください。

app/models/article.rb

   1  class Article < ActiveRecord::Base
   2    acts_as_searchable

あとは、以下のように類似検索を行うだけです。

   1  Article.similarity_search(target_article, :limit => 5)

ちなみに、このブログの類似記事表示機能でも使用しています。

MIT LICENSE に基づいて、修正版を再配布します。

  1. このソフトウェアを誰でも無償で無制限に扱って良い。但し、著作権表示および本許諾表示を、ソフトウェアのすべての複製または重要な部分に記載しなければならない。
  2. 作者または著作権者は、ソフトウェアに関してなんら責任を負わない。

修正部分のコードもMIT LICENSEとします。

posted by Png genki on Thu 29 Nov 2007 at 23:08

SyslogLogger

SyslogLogger is a Logger replacement that logs to syslog. It is almost drop-in with a few caveats.

SyslogLoggerを使うと、railsのログを syslog に記録するように する事ができます。

インストール方法

   1  % sudo gem install SyslogLogger

普通に rubygems としてインストールできます。 続いて、アプリケーションの設定を行います。

config/environments/production.rb

   1  # SyslogLogger
   2  require 'syslog_logger'
   3  RAILS_DEFAULT_LOGGER = SyslogLogger.new 'appname'

appnameはアプリケーションを識別する名前に置き換えてください。

さらに、syslogの設定を行います。 rootになって以下の記述を書き加えます。

/etc/syslog.conf

!appname
*.*     /var/log/appname.log

修正が済んだら、空の/var/log/appname.logファイルを作成して syslogdを再起動します(例えば killall -HUP syslogd

これで、以後は /var/log/appname.log 及び /var/log/syslog に ログデータが書き出されるようになります。

posted by Png genki on Thu 29 Nov 2007 at 05:28

Hash#sliceが欲しい をさらに拡張。

指定したキーを取り除いたHashを返すHash#exceptを追加。 併せて、既存のHash#sliceHash#onlyに改名してみました。

hash_ext.rb

   1  class Hash
   2    def only(*args)
   3      args = *args if args[0].is_a? Array
   4      args.inject({}){|hash, key| hash[key] = self[key]; hash}
   5    end
   6    
   7    def except(*args)
   8      args = *args if args[0].is_a? Array
   9      args.inject(dup){|hash, key| hash.delete(key); hash}
  10    end
  11  end

使い方:

   1  cond = params.only :year, :month, :day
   2  ma = MonthlyArchive.find :all, :conditions => cond.except(:day)

posted by Png genki on Thu 29 Nov 2007 at 03:08
Contents
acts_as_searchable_with_similarity
acts_as_searchableで類似検索を行う方法
Railsアプリケーションのログをsyslogに記録する方法
Hash#except and Hash#only
Comments
dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これ... '13-1
瀧内元気: おお、チェックしてみます。thx! '11-12
overisland: Reeder for iPhone もこの UI を実装していますね。 '11-12
瀧内元気: その情報は見たのですが、以下のサイトによると、現在はまた必要になってるっぽいんですよね。 ... '11-12
tkawa: http://devcenter.heroku.com/articles/rails31_he... '11-12
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ