OpenSearchプラグインに対応しました
Creating OpenSearch plugins for Firefox
を参考に、このブログの検索機能をOpenSearchプラグインに対応しました。
FirefoxやFlock、CaminoなどのMozilla系のブラウザの検索バーから、
サイト内を検索することができます。
Creating OpenSearch plugins for Firefox
を参考に、このブログの検索機能をOpenSearchプラグインに対応しました。
FirefoxやFlock、CaminoなどのMozilla系のブラウザの検索バーから、
サイト内を検索することができます。
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
rails>>
class Article < ActiveRecord::Base
acts_as_searchable
end
Article.similarity_search(target_article, :limit => 5)
<<--
acts_as_searchable
は、
HyperEstraier
を使って簡単に全文検索を行うことができる、
非常に便利なRailsプラグインです。
しかし、HyperEstraierが提供する類似検索機能を使うインターフェイスが
用意されていないようだったので、類似検索機能を付け足しました。
オリジナルの
acts_as_searchable
に対する差分はこちらにあります。
使い方
まずは、オリジナルと同様に検索対象のモデルにacts_as_searchableを書き加えます。
必要に応じて適切なオプションを指定してください。
app/models/article.rb
rails>>
class Article < ActiveRecord::Base
acts_as_searchable
<<--
あとは、以下のように類似検索を行うだけです。
rails>>
Article.similarity_search(target_article, :limit => 5)
<<--
ちなみに、このブログの類似記事表示機能でも使用しています。
MIT LICENSE
に基づいて、修正版を再配布します。
- このソフトウェアを誰でも無償で無制限に扱って良い。但し、著作権表示および本許諾表示を、ソフトウェアのすべての複製または重要な部分に記載しなければならない。
- 作者または著作権者は、ソフトウェアに関してなんら責任を負わない。
修正部分のコードもMIT LICENSEとします。
HyperEstraier
は、全文検索エンジンです。Ruby on Railsから利用する場合は、acts_as_searchableを利用すると、非常に簡単にWebサービスに検索機能を追加することができます。
今回は、HyperEstraierのP2P連携機能を使ってクラスタリングを行う手順を紹介します。
まず、クラスタリングを行う全てのPCに、
通常の手順でHyperEstraierをインストール
します。パッケージマネージャを使う事もできますが、今回はソースからインストールする事にします。
インストールが済んだら、HyperEstraierを初期化して起動します。以下では、/usr/local/hyperestraier以下に環境を構築しています。
shell-unix-generic>>
<<--
起動したら、ポート1978にアクセスし、動いていることを確認します。
続いてWebインターフェイスからノード間のリンクを作成します(もちろん、あらかじめノードを作成しておく必要があります。)
リンクの作成は、ノード編集画面から行います。
例)
http://search-1.com:1978/master_ui?action=10&name=nodename
ノード編集画面の一番下のlist of linksに以下のように、「{{!}}」で区切って別なサーバのノードを登録します。
http://search-2.com:1978/node/nodename{{!}}label{{!}}1000
上記は、search-2.com上のnodenameというノードに対して、labelというラベルでリンクを作成しています。1000というのは信頼度で、検索結果の順位に影響します。1台目から2台目へのlinkの設定が済んだら、2台目から1台目に逆方向にリンクを張ります。
以上でクラスタリングは完了です。
実際に検索を行うときは、メタ検索のdepthを1以上に指定する必要があります。