プラグインXapian search pluginの検索エンジンをHyper Estraierへ替える » 履歴 » バージョン 3
Masanori Machii, 2011/10/27 16:23
1 | 1 | Masanori Machii | h1. プラグインXapian search pluginの検索エンジンをHyper Estraierへ替える |
---|---|---|---|
2 | |||
3 | Xapian search pluginは,チケットの添付ファイル内のテキストを検索するプラグインです.これもまたその名が示すように,Xapianを使っており,そのままでは日本語に対応できません. |
||
4 | |||
5 | 3 | Masanori Machii | 加えて,改造はDMSFよりも厄介です.プラグインの名称に,大胆にも Xapian という文字列を使っていることから想像されるように,モジュール名,変数名,メソッド名に現れる xapian を |
6 | すべて estraier に書き換えると,動きません!それを一部ずつ修正しても,かえってバグを混入させてしまいます. |
||
7 | 1 | Masanori Machii | |
8 | 3 | Masanori Machii | なので,修正のポリシーは“[[プラグインDMSFの検索エンジンをHyper Estraierへ替える]]”とは同様にならず,少し複雑です. |
9 | 1 | Masanori Machii | |
10 | 3 | Masanori Machii | まず,同様な方から示すと, |
11 | |||
12 | # Web画面に "Xapian" 由来の設定などがあれば,それはそのままにし,削除しない.(stem,languageらは機能しないまま残る) |
||
13 | 1 | Masanori Machii | # Web画面に Estraier に対応するものがあれば,それは "Estraier" へと修正する.(現バージョンではない) |
14 | # エラーメッセージなどに "Xapian" という文字列があれば,それは "Estraier" へと上書きする. |
||
15 | # ソースコード中 "Xapian" を呼び出す部分は削除する.(ロジックの変更) |
||
16 | 3 | Masanori Machii | # ソースコード中 "Xapian" という変数名を "Estraier" へと置き換える部分を極力少なくする. |
17 | # ソースコード中 "xapian" というラベル名称や,"redmine_xapian" のようにプラグインの由来の変数名があれば,そのまま利用する. |
||
18 | 1 | Masanori Machii | |
19 | |||
20 | 3 | Masanori Machii | 次に複雑な方を示します. |
21 | # 何らの理由により "Estraier" 検索環境が整備できない場合でも,添付ファイルの「タイトルのみ」検索はできるようにする. |
||
22 | # "Xapian search plugin" に,その仕掛けから生じたと思われる,添付ファイル検索の権限に関する外部仕様がある.「文書」と関連するこれを独立させた. |
||
23 | プラグインDMSFの場合は,アップロードしたファイルは,$REDMINE/files よりも一つ下へ下げたディレクトリ dmsf へファイルを置きましたが,添付ファイルはこの files 下へ置かれます.そのインデックスファイルはどこに置かれるべきか?と考えた場合,もちろん files 下へは置けません.なので,一つ上のディレクトリ $REDMINE へ置くことになります.そういうわけで,インデックス・ファイルの名称は files_index になります. |
||
24 | # 検索用インデックスのディレクトリは言語毎に分けない. |
||
25 | # バージョンは,日本語版であることを示すため,1.yy.zz-JP とする. |
||
26 | 1 | Masanori Machii | |
27 | 3 | Masanori Machii | |
28 | さて,変更するファイルは次の6つです. |
||
29 | |||
30 | # config/locales/ja.yml |
||
31 | # init.rb |
||
32 | # app/controllers/search_controller.rb |
||
33 | # app/views/search/index.rhtml |
||
34 | # lib/acts_as_searchable.rb |
||
35 | # lib/xapian_search.rb |
||
36 | |||
37 | |||
38 | h2. config/locales/ja.yml |
||
39 | |||
40 | 奇妙ですが,DMSFの方は最初から ja.yml がありました.ですが,さすがに当該プラグインにはそれはありません.なので,ja.yml は新たに(en.ymlを基にして)作ります. |
||
41 | |||
42 | <pre> |
||
43 | @@ -0,0 +1,29 @@ |
||
44 | +ja: |
||
45 | + |
||
46 | + label_enable_redmine_xapian: "hyper estraier による添付ファイル検索を可能にする" |
||
47 | + label_index_database: "hyper estraier 検索インデックスディレクトリ" |
||
48 | + label_stemming_text: "set the stemming language, the default is 'english'. |
||
49 | + Possible values: danish dutch english finnish french |
||
50 | + german german2 hungarian italian kraaij_pohlmann |
||
51 | + lovins norwegian porter portuguese romanian russian |
||
52 | + spanish swedish turkish (pass 'none' to disable |
||
53 | + stemming)" |
||
54 | + label_search2: "Extended Search" |
||
55 | + text_search1: "This plugin does same redmine search plus searches into attachment. To enable xapian you have to build database with omindex utility and configure index database on plugin settings page" |
||
56 | + label_document: "ドキュメント" |
||
57 | + label_issue: "チケット" |
||
58 | + label_wiki: "Wiki" |
||
59 | + label_message: "メッセージ" |
||
60 | + label_article: "Article" |
||
61 | + label_article_plural: "Articles" |
||
62 | + label_stemming_lang: "Stemming Language(注:estraier版では未使用)" |
||
63 | + label_enable_xapian_on_search: "検索画面でhyper estraier使用可" |
||
64 | + label_search_languages: "Stemming languages on search screen(注:estraier版では未使用)" |
||
65 | + label_stemming_strategy: "Stemming strategy(注:estraier版では未使用)" |
||
66 | + label_stem_none: "Stem none" |
||
67 | + label_stem_some: "Stem some" |
||
68 | + label_stem_all: "Stem all" |
||
69 | + label_default_stemming_lang: "Set default stemming lang(注:estraier版では未使用)" |
||
70 | + label_default_stemming_strategy: "Set default stemming strategy(注:estraier版では未使用)" |
||
71 | + label_database_error: "検索インデックスエラー。Hyper Estraier利用環境を構築してください。" |
||
72 | + |
||
73 | </pre> |
||
74 | |||
75 | |||
76 | h2. init.rb |
||
77 | |||
78 | ライブラリ名称を xapian から estraier に変更します.加えて,先の ya.yml に対応する警告のラベルと一致させます. |
||
79 | |||
80 | <pre> |
||
81 | @ -7,10 +7,10 @@ |
||
82 | |||
83 | |||
84 | begin |
||
85 | - require 'xapian' |
||
86 | + require 'estraier' |
||
87 | $xapian_bindings_available = true |
||
88 | rescue LoadError |
||
89 | - Rails.logger.info "REDMAIN_XAPIAN ERROR: No Ruby bindings for Xapian installed !!. PLEASE install Xapian search engine interface for Ruby." |
||
90 | + Rails.logger.info "REDMAIN_XAPIAN ERROR: No Ruby bindings for Hyper Estraier installed !!. PLEASE install Hyper Estraier search engine interface for Ruby." |
||
91 | $xapian_bindings_available = false |
||
92 | else |
||
93 | require 'redmine' |
||
94 | @@ -28,7 +28,7 @@ |
||
95 | author_url 'http://undefinederror.org' |
||
96 | |||
97 | description 'With this plugin you will be able to do searches by file name and by strings inside your documents' |
||
98 | - version '1.2.1' |
||
99 | + version '1.2.1-JP' |
||
100 | requires_redmine :version_or_higher => '1.0.0' |
||
101 | |||
102 | settings :partial => 'settings/redmine_xapian_settings', |
||
103 | </pre> |
||
104 | |||
105 | h2. app/controllers/search_controller.rb |
||
106 | |||
107 | 検索エンジンが利用できない場合は,警告メッセージを出力する.なお,「タイトルのみ」検索の場合はこの限りではない. |
||
108 | |||
109 | <pre> |
||
110 | @@ -96,6 +96,7 @@ |
||
111 | end |
||
112 | |||
113 | end |
||
114 | + flash[:warning] = "warning: #{l(:label_database_error)}" unless @titles_only || $xapian_bindings_available |
||
115 | @results = @results.sort {|a,b| b.event_datetime <=> a.event_datetime} |
||
116 | if params[:previous].nil? |
||
117 | @pagination_previous_date = @results[0].event_datetime if offset && @results[0] |
||
118 | </pre> |
||
119 | |||
120 | |||
121 | h2. app/views/search/index.rhtml |
||
122 | |||
123 | h2. lib/acts_as_searchable.rb |
||
124 | |||
125 | h2. lib/xapian_search.rb |