Pythonでmeilisearchを用いて簡単な検索エンジンを作成してみます。
今回「meilisearch」を用います。このライブラリ・モジュールは、Pythonの標準ライブラリではありませんので、事前にインストールする必要があります。
■Python
今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)
■meilisearchを用いて簡単な検索エンジンを作成する
では、早速meilisearchを用いて簡単な検索エンジンを作成し、作成した検索エンジンの中からデータを出力するスクリプトを書いていきます。
■コード
import meilisearch client = meilisearch.Client('http://127.0.0.1:7700','masterKey') index = client.index('test_book1') documents = [ {'test_id':1,'title':'吉田'}, {'test_id':23,'title':'盛岡'}, {'test_id':423,'title':'小杉'}, {'test_id':543,'title':'村尾'}, {'test_id':7,'title':'佐々木'} ] index.add_documents(documents) print(index.search('小杉'))
meilisearchモジュールをimportで呼び出します。その後に、indexという変数を定義し、client.index()を用いて、文書(ドキュメント)が格納される場所を設定します。今回は「test_book1」という名前の場所を設定します。
設定後、documentsという変数を定義し、その中で角括弧”[ ]”と波括弧”{ }”を用いて、「test_book1」という場所に格納する文書(ドキュメント)を作成し、格納します。
格納後、add_documents()を用いて「test_book1」という名前の場所にdocumentsに格納した文書を追加します。
追加後、search()を用いて「test_book1」内から括弧内に引数,パラメータとして渡したキーワードを元に検索を行い、検索結果をprint()関数で出力します。
■実行・検証
このスクリプトを「encryption_test.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。
実行してみると、スクリプトが実行したままになり、コマンドプロンプト上に何も出力されません。
そのため、WindowsにMeiliSearchをインストールするために、最新のバイナリをダウンロードします。ダウンロードはこちら(https://docs.meilisearch.com/learn/getting_started/installation.html#download-and-launch)からできます。
ダウンロード後、「meilisearch-windows-amd64.exe」というファイルをダブルクリックで起動させます。
起動後、上記のメッセージが出力されます。出力後、このウインドウを開いたまま、新しくコマンドプロンプトを起動し、今回のスクリプトを実行します。
Traceback (most recent call last): File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\meilisearch\_httprequests.py", line 99, in __validate request.raise_for_status() File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\requests\models.py", line 943, in raise_for_status raise HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 404 Client Error: Not Found for url: http://127.0.0.1:7700/indexes/test_book1/search The above exception was the direct cause of the following exception: Traceback (most recent call last): File "search_test.py", line 17, in print(index.search('小杉')) File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\meilisearch\index.py", line 237, in search return self.http.post( File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\meilisearch\_httprequests.py", line 61, in post return self.send_request(requests.post, path, body, content_type) File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\meilisearch\_httprequests.py", line 43, in send_request return self.__validate(request) File "C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\meilisearch\_httprequests.py", line 102, in __validate raise MeiliSearchApiError(str(err), request) from err meilisearch.errors.MeiliSearchApiError: MeiliSearchApiError. Error code: index_not_found. Error message: Index `test_book1` not found. Error documentation: https://docs.meilisearch.com/errors#index_not_found Error type: invalid_request
実行すると、上記のエラーメッセージが出力されました。「test_book1」が「not found」ということですが設定したはずなので問題はないと判断し、このエラーが出力後、再度コマンドプロンプト上でスクリプトを実行してみます。
{'hits': [{'test_id': 423, 'title': '小杉'}], 'nbHits': 1, 'exhaustiveNbHits': False, 'query': '小杉', 'limit': 20, 'offset': 0, 'processingTimeMs': 0}
実行してみると、今度は「test_book1」内から指定したキーワードと一致する情報が”hits”となり、情報が出力されることを確認できました。今回は「test_book1」内に日本語のデータを格納しましたが、日本語であっても、検索を行い結果が表示されることも、検証でわかりました。
なお、「meilisearch-windows-amd64.exe」をダブルクリックし、起動した状態になっているので、そちらのウインドウは、上記のようになっていることも確認できました。
コメント