Pythonでmeilisearchを用いて簡単な検索エンジンを作成する。

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」をダブルクリックし、起動した状態になっているので、そちらのウインドウは、上記のようになっていることも確認できました。

コメント

タイトルとURLをコピーしました