プログラミングしたい日記

いつもプログラミングとか音楽聞いてたりする人の日記です

ホームページに検索機能をつけてみた

すごく単純な検索フォームをホームページにつけてみました。
検索はファイル内の文字列が一致するかどうかでしか判定してないです。はい。
AND検索とかOR検索とか作るのめんどくさかったから作りませんでした。

ここに検索したい文字列を入れてEnterを押すと
f:id:wintermaples:20140911004151p:plain
こうなります。
f:id:wintermaples:20140911004154p:plain

まあ検索のアルゴリズムは非常に簡単なので以外と簡単に「実装は」できました。
それよりも文字化けの問題のほうが苦労しましたorz

仕組み

HTMLの解析にはJSoupを利用しました。すごく短くすんですっきり。

まず、サーバー内の.html・.jsp拡張子とフォルダのみを取得します。

    //特定の拡張子とディレクトリを取得
    File[] files = dir.listFiles((File pathname) -> {
      for (String ext : searchExts) {
        if (pathname.getName().contains(ext) || pathname.isDirectory())
          return true;
      }
      return false;
    });

で、ファイルならファイルから文字列を普通に検索してフォルダならさらに奥の階層に行きます。
で、一致したファイルをリストに入れていくだけの単純なしくみです。

    for (File file : files) {
      //フォルダであればさらに検索してマッチしたファイルをリストに追加
      if (file.isDirectory())
        matchFiles.addAll(Arrays.asList(search(file, searchStr)));
      //ファイルであればファイルがマッチすればリストに追加
      else {
        MatchFile matchFile = searchFile(file, searchStr);
        if (matchFile != null)
          matchFiles.add(matchFile);
      }
    }

ファイルの検索はもう生のファイルをそのまま検索しているのでjavaとか検索すると普通に全部のファイルがマッチしちゃうクソ仕様です。
あと短い単語は検索できないように4文字以上じゃないと検索できないようにしました。

まとめ

そろそろ普通にサービスの開発にいこうかなと思います。
多分文字化けとかの問題はないと思うのでまあある程度の速度とクオリティーは保てるかな...?

CSS Design created by satotaka99. Thankyou.