windowsでHyper Estraierを用いた全文検索システムの構築

ちょっと構築してみて、驚くほど簡単だったのと、凄く便利だったのだけれども、

windows環境特有のはまった点などをメモ。

 

Q.そもそも、全文検索ってなによ? 

A.MS-Office文書やPDFファイル(テキスト選択できるもの、

  スキャナでとった画像ではないもの)の文書の中身の単語で検索できるので便利。

 

はまりポイント

1. 日本語Windows文字コードSJISなのでハマル

  WindowsHyper Estraier特有の問題ですが、

  SJISの"0x5C"問題(エスケープシーケンス記号問題)というのにハマります。

  具体例を挙げると、フォルダ名の末尾”~表”になっているフォルダに

  保存されているファイルがデータベースに登録できません。

  この問題を修正されたバイナリを公開されている方がいましたので、

  詳しくはそちらを参照ください。

d.hatena.ne.jp

 

2. estseek.confの設定でハマル

 以下の2行を環境に合わせて書き換えなければなりませんが、

 ここで、ハマりました。

 replace:ほげほげ

 showlreal: ふがふが

 

●設定その1

showlreal:true とすると、ファイルへのパスはWindowsのパスのまま扱われます。

       Windowsファイルサーバ上の共有フォルダ内に

       検索対象のファイルがある場合などは、ここをtrueに設定します。

       これで、ブラウザで検索したときに、検索結果に見えるアドレスが

       \\サーバ名\フォルダ名\ファイル名

       のようなアドレスになります。

 

●設定その2

showlreal:false  とすると、ファイルへのパスはUTF-8のURL形式として扱われます。

        Hyper Estraierが動作しているサーバ上(ローカルフォルダ)に

       検索対象となるファイルがある場合は、ここをfalseに設定します。

       このままだと、ブラウザから見えるURLの部分がC:\~で始まる

       ローカルパスのアドレスになってしまうので、

       続いてreplace:行を書き換えます。

       ↓こちらのサイトを参考にさせていただきました。

Hyper Estraier を Windows + Apache2 にインストール

 

replace: ^file:///C|/Program%20Files/html/{{!}}http://www.hoge.com/

のように、半角スペースを%20に置換して入力しなければなりません。

普通に半角スペースで入れていたら置換されずにハマリました。

 

上記の1と2の設定方法を踏まえて、

  Windowsファイルサーバ上の共有フォルダ内のドキュメントと、

  Hyper Estraierが動作しているサーバ上のドキュメントを

  別々のデータベースとして管理する場合は以上で終了ですが、

  ひとまとめにして検索できるデータベースを作りたい場合には、

  どうしたらよいのか?? というところでハマリました。

 

やるべきことは...

showlreal:trueに設定する。 

これで、

Windowsファイルサーバ上の共有フォルダ内のドキュメントにはリンクから飛べる

逆にHyper Estraierが動作しているサーバ上のドキュメントには飛べない。

 

じゃあ

showlreal:falseに設定する。 

Windowsファイルサーバ上の共有フォルダ内のドキュメントには飛べない

逆にHyper Estraierが動作しているサーバ上のドキュメントには飛べる。

 

うん逆転したね。
 

おいおい、どうしたらいいんだってばよ...

 

色々試してたどり着いた結果...

showlreal:trueに設定する。 

replace: ほげほげを

replace: ^file:///C|/Program%20Files/html/{{!}}http://www.hoge.com/

  ↓ 

replace: ^C:\\Program Files\\html\\{{!}}http://www.hoge.com/

   のようにWindowsのパス表記に書き換える!!

   表示上バックスラッシュ”C:\”で表示されてしまいますが、

   ”C:¥¥”のように読み替えてください

というオチでした。 はい。

 

分からなかったよ...

showlreal:true / false を行ったりきたりして、もしかして true に設定したら

replaceが効かなくなるのかしら? とかあらぬ方向に迷い込んでました。

 

showlreal:false UTF-8のURL形式

showlreal:true 日本語Windows標準のSJIS形式

に変わるので、それにあわせてreplaceの行もSJIS形式で書き直さないとダメだったんですねー。 

 

分かってしまえば簡単なことですが、分からないとハマリます。