Python

Pythonで全文検索アプリをつくる -StreamlitとFessを活用-

Streamlitで全文検索アプリをつくる

こんにちは。現役エンジニアの”はやぶさ”@Cpp_Learningです。全文検索エンジンや検索システムに興味があって勉強中です。

実践を兼ねた勉強として、Pythonで全文検索アプリを作りました。

作り方などの備忘録として本記事を書きます。

対象読者

本記事の対象読者は以下の通りです。

対象読者
  • 全文検索に興味がある人(入門したい人)
  • 全文検索サーバの Fess について知りたい人
  • Pythonライブラリの Streamlit で Web アプリを作りたい人
  • Fess のAPIと Streamlit で作ったUIによる全文検索アプリを作りたい人

特に最後の項目が本記事のゴールなので、最後まで読めばPythonで全文検索アプリを作れるようになります。

全文検索とは

全文検索について、Wikipediaでは下記のように説明しています。

全文検索とは、コンピュータにおいて、複数の文書(ファイル)から特定の文字列を検索すること。「ファイル名検索」や「単一ファイル内の文字列検索」と異なり、「複数文書にまたがって、文書に含まれる全文を対象とした検索」という意味で使用される。

引用元:Wikipedia

もう少し易しい言葉で説明すると「複数のデータの中」から「入力した検索キーワード」「一致するワード(文字列)を含むデータ」を探索することです。

スポンサーリンク

全文検索サーバーのFessとは

Fess(フェス)とは 5分で構築できるオープンソースの全文検索サーバー です。魅力的な特徴が沢山ありますが、特に重要なものを以下に列挙します。

Fessの特徴
  • Apache ライセンスなので、個人から商用利用まで無料で自由に使える
  • Java 実行環境さえあればどの OS でも動作可能
  • 検索エンジンに Elasticsearch を利用
  • Web/ファイルシステム/クラウドストレージ/データベースをクロール
  • Word/Excel/PowerPoint や PDF など多くのファイル形式に対応
  • インデックスを作成できる
  • 独自の辞書も作成できる
  • JSON APIがあるので、別アプリからFessサーバーの検索機能を活用可能

これで無料とか凄すぎます!

Fessのインストール(環境構築)

Fessの環境構築については、公式サイトで丁寧に説明しているので、手順通りに進めれば問題なくセットアップできます。

Javaをインストール済みの人でも、素直に一番上の手順を参考に(Java関連の部分を読み飛ばしながら)進めるのが良いと思います。

Fessでインデックス作成 -クロール設定-

環境構築が完了したら、Fessを起動して、インデックスを作成します。今回は本サイト「はやぶさの技術ノート」をクロール対象として登録します。

Fessでインデックスの作成

つまり、本サイトの各ページを探索(クロール)し、全文検索の対象として登録(インデックスを作成)します。

クロール完了後、「深層学習」などのキーワードを入力して検索した結果が下図です。

FessでWebページを全文検索

Fessの検索 API

Fessサーバーは 検索API を提供しているため、http://localhost:8080/json/?q=検索語 というリクエストを送ることで、 検索結果をJSON形式で受け取ることができます。

例えば、http://localhost:8080/json/?q=深層学習 でリクエストを送ると、以下のJSONを受け取ることができます。

検索結果(JSON)を見る

このJSON APIを活用し、Webアプリなどからリクエストを投げ、JSONでレスポンスを受け取ることで、オリジナルの全文検索アプリを作成できます。

localhost:8080 の部分はFessサーバーのアドレスが入ります。

Streamlitとは

StreamlitとはPythonソースコードのみでWebアプリを開発できるライブラリです。フロントエンドの開発経験不要で、素早くプロトタイプを作成できることを売りにしています。

以下のコマンドで簡単にインストールできます。

pip install streamlit

公式サイトに豊富なサンプルや丁寧なAPIリファレンスがあるので、「やりたいこと」を直ぐに実現できます。

Pythonで全文検索アプリをつくる

今回つくった全文検索アプリ(Streamlit製Webアプリ)のソースコード(app.py)が以下です。

以下のコマンドでアプリを起動後、http://localhost:8501 にアクセスすれば全文検索できます。

streamlit run app.py

自作Webアプリで全文検索している様子が以下です。

※冒頭と同じ動画です。

【おまけ】PythonのHTTPリクエスト用ライブラリどれ使う?

PythonのHTTPクライアント用ライブラリだと、RequestsHTTPX が有名どころですが、どっちを使っている人が多いか気になったので、簡単なアンケート調査をしました。

結果は上記の通り、Requests を使う人の方が多いようです。ただ、後発のHTTPXの方が機能が充実しているので、今後はHTTPXを積極的に使っていこうと思います。

はやぶさ
はやぶさ
アンケート調査にご協力いただき、ありがとうございました。

まとめ -Pythonで全文検索アプリをつくる-

全文検索サーバーのFessPythonライブラリのStreamlitを活用し、Pythonで全文検索アプリを作りました。

Pythonに拘った理由は、今回つくったWebアプリに以下の機能を追加する際、Pythonライブラリを活用するのが近道だと思ったからです。

全文検索アプリに追加したい機能
  • 同義語検索
  • 類義語検索
  • 機械学習による自然言語処理

アプリ作り楽しいので、今からワクワクしてます。

検索技術や自然言語処理の勉強を始めたばかりですが、今後も勉強した内容を本ブログで公開したいと考えています。

はやぶさ
はやぶさ
情報共有しながら一緒に成長できたら嬉しいです。また間違っている説明があれば、優しく指摘して頂けたら、すごく嬉しいです。

今後もブログ「はやぶさの技術ノート」をよろしくお願いします。

Amazonギフト券チャージで最大2.5%ポイント還元
Amazonはチャージがお得

Amazonプライム会員なら、Amazonギフト券を現金でチャージ(コンビニ・銀行払い)すると最大2.5%ポイント還元!

クレジットカード払いでもキャンペーンエントリー0.5%ポイント還元中です。

Amazonでお得に買い物をするならまずはチャージから。

\チャージがお得/

詳細をチェックする

Amazonプライム無料体験中でもOK!

PICK UP BOOKS

  • 数理モデル入門
    数理モデル
  • Jetoson Nano 超入門
    Jetoson Nano
  • 図解速習DEEP LEARNING
    DEEP LEARNING
  • Pythonによる因果分析
    Python