2015年8月4日火曜日

全文検索システム Fessを使ってみる

ファイルサーバーの検索性を上げる為に全文検索システムを入れてみる事にした。
利用者のファイルサーバーへのアクセス権限をリードオンリーとし、使い勝手を良くする為にWebDAVを導入したので、クローリングはWEBのみ。
Fessは日本語の全文検索システムなので、余程下手な事をしなければ、導入は非常に簡単。
取り敢えず初期設定等はヘルプや先人の方々の記録を見ながら実施すれば、素人レベルの私でも30分もかからない。
設定が終わって、早速ファイルサーバーをクロールさせ、検索してみると、<CITE>タグ部分でディレクトリ名が長くなると、途中で省略されてしまう。 リンク部分に表示される文字列も同様である。
ファイル名やディレクトリ名に色々な意味を持たせているので、これらも重要な検索要素なのだが、表示が省略されてしまっては、意味が無い。
結局、標準のままの検索結果表示画面は使用に耐える状態では無かったので、表示部分だけ少し弄らせてもらった。

検索結果を表示しているファイルは「searchResults.jsp」で、fessをインストールしたフォルダーの「\webapps\fess\WEB-INF\view\」に存在する。
まず、検索結果のURLを表示する<cite>タグの部分。標準のままだと、パスの途中で省略されてしまって、フルパスが表示されない。 先にも書いたが、フォルダー名にも意味を持たせているので、ここはフルパスで表示しておきたい。
40代ヘタレプログラマ(組込系)のブログ」様の記事を参考に丸写しした処、URLはフルパスで表示されるものの、2バイト文字がURLエンコーディングされてしまって、[%xx]の羅列が表示されてしまう。 流石にURLエンコーディングされたフルパスの文字列は非常に見難い。
仕方がないので、JavaScriptを挟み込んでデコードする事にした。
--------------------------------------------------------------
<%--
<div class="site ellipsis">
<cite>${f:h(doc.sitePath)}</cite>
<c:if test="${doc.hasCache_s_s=='true'}">
<a href="cache?docId=${doc.docId}${appendHighlightQueries}" class="cache"><bean:message
key="labels.search_result_cache" /></a>
</c:if>
</div>
--%>
<div class="info_urlj">
<cite>
<script type="text/javascript">
var urlj="${doc.urlLink}";
document.write(decodeURIComponent(urlj));
</script>
</cite>
</div>
--------------------------------------------------------------
とりあえず、これでフルパスの2バイト文字は問題無く表示されている。
次にLINKの表示部分。
標準では検索した結果から、タイトルやファイルの要素的な物を引っ張ってきて表示しているみたいなのだが、ディレクトリ名等は上記と同様、途中で省略されてしまって、何が何やら分からなくなってしまう。
実用上はファイルやディレクトリのフルパスの最後の文字列を取得し、それだけを表示してくれれば問題ない。
これの方法は「ラスボスはめんどくさい」様の記事を参考に、例によって丸写しさせて頂いた。
で、まぁ${doc.urlLink}がURLエンコーディングされた後の文字列なので、こちらも上記同様、2バイト文字を普通に表示させるにはデコードしなければならない。
--------------------------------------------------------------
<a class="link" href="${doc.urlLink}" data-uri="${doc.urlLink}" data-id="${doc.docId}">
<script type="text/javascript">
var urlj="${f:h(fn:split(doc.urlLink,"/")[fn:length(fn:split(doc.urlLink,"/"))-1])}";
document.write(decodeURIComponent(urlj));
</script></a>
--------------------------------------------------------------
リンクが表示される部分を以上のように書き換える事で、欲しい情報を表示させる事ができた。
適当に弄っただけなので、これで問題がないのかどうか分からないが、ローカルのファイルサーバー内を検索するだけだし、まわりに迷惑がかかるような事は無いだろう。
また、クロール先がsmbだったりデータベースだったりした場合は、表示がおかしくなるかもしれないが、試していないので、分からない。 

0 件のコメント:

コメントを投稿