App Search は、Elasticsearch を利用したコンテンツ検索ツールのコレクションである Elastic Enterprise Search の一部です。
Web クローラーなど、もともと App Search で導入された一部の機能は、Enterprise Search を通じて直接利用できるようになりました。これらの機能を、コネクタや検索 UI ライブラリなどの他のエンタープライズ検索ツールと組み合わせます。
今日の記事では、アプリ検索用のデータの書き込み方法について詳しく説明します。データベース内のデータを App Search に書き込みたい場合は、以前の記事「Enterprise: Python クライアントを使用して App Search にデータを抽出する方法」を参照してください。
インストール
まず、記事「 Enterprise: MySQL コネクタを使用して MySQL データを Elasticsearch に同期する」の記事に記載されている方法に従って、Elastic Enterprise App Search をインストールします。ここでは繰り返しません。
データを準備する
TMDB の映画とシリーズ | Kaggleをリンクして、オンラインで TMDB にデータをダウンロードできます。526,000 本の映画と 93,000 以上のテレビシリーズが含まれています。Web ページの [ダウンロード] ボタンをクリックします。
次のコマンドを使用して圧縮できます。
$ pwd
/Users/liuxg/data/movies_tmdb
$ ls
archive.zip
$ unzip archive.zip
Kibana インターフェースを開きます。
上では、App Search の管理対象ドキュメントを選択します。
上に示したように、現在、ファイルを取り込むための 3 つの方法が提供されています。Crawler については、これまでの記事で紹介した記事がたくさんあります。
ここでは、紹介はしません。このトピックに興味がある場合は、上記の記事を読んで詳細をご覧ください。
上で、 「JSON の貼り付けまたはアップロード」を選択します。
解凍したばかりのファイルの 1 つを選択しましょう。
ドキュメントが取り込まれたことがわかります。
上の [ドキュメント] をクリックすると、取り込まれたドキュメントが表示されます。
デフォルトでは、すべてのフィールドはテキストとして入力されます。これは明らかに私たちが期待していたものではありません。上記のインターフェイスを通じてフィールドのデータ型を変更できます。
データが表す内容に基づいて、適切なタイプを選択します。通常、取り込むドキュメントを選択し、すべてのフィールドのデータ型を調整します。そうしないと、すべての書類を取り込んだ後に調整することになり、さらに時間がかかります。データ内の各フィールドの型を定義すると、スキーマの定義が完了します。上の[変更を保存] をクリックします。
その後、さらに他のドキュメントを取り込むことができます。
次のコマンドを使用して、対応する Elasticsearch インデックスを見つけることができます。
GET _cat/indices
Python コードを使用してドキュメントを取り込むこともできます。まず、次の場所からソース コードをダウンロードします。
git clone https://github.com/liu-xiao-guo/tutorials
app-search ディレクトリに入ると、app_search_ingest.py ファイルが表示されます。
app_search_ingest.py
from elastic_enterprise_search import AppSearch
import glob, os
import json
app_search = AppSearch(
"app_search_api_endpoint",
http_auth="api_private_key"
)
response = []
print("Uploading movies to App Search...")
os.chdir("movies_directory")
for file in glob.glob("*.json"):
with open(file, 'r') as json_file:
try:
response = app_search.index_documents(engine_name="movies",documents=json.load(json_file))
print(".", end='', flush=True)
except:
print("Fail!")
print(response)
break
上に示したように、http_auth で秘密キーを取得する必要があります。次の方法で取得できます。
私の状況に応じて、上記のコードを次のように変更します。
from elastic_enterprise_search import AppSearch
import glob, os
import json
app_search = AppSearch(
"http://localhost:3002",
http_auth="private-49cx4j3qe4pv35n4xxy4b4z7"
)
response = []
print("Uploading movies to App Search...")
os.chdir("/Users/liuxg/data/movies_tmdb/movies/movies")
for file in glob.glob("*.json"):
with open(file, 'r') as json_file:
try:
response = app_search.index_documents(engine_name="movies",documents=json.load(json_file))
print(".", end='', flush=True)
except:
print("Fail!")
print(response)
break
次に上記のコードを実行します。
pip install elastic_enterprise_search
Kibana インターフェースで新しく取り込まれたドキュメントを確認できます。
コードのルート ディレクトリには、app_search_query.py ファイルもあります。私自身の設定に従って、次のように変更しました。
app_search_query.py
import requests
api_endpoint = 'http://localhost:3002' + '/api/as/v1/engines/movies/search'
api_key = 'private-49cx4j3qe4pv35n4xxy4b4z7'
headers = {q'Content-Type': 'application/json',
'Authorization': 'Bearer {0}'.format(api_key)}
query = {'query': 'family'}
response = requests.post(api_endpoint, headers=headers, json=query)
print(response.text)
次のようにコードを実行します。
たくさんのアウトプットが見られます。