エンタープライズ: アプリ検索を通じてデータを取り込む

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)

次のようにコードを実行します。

たくさんのアウトプットが見られます。 

おすすめ

転載: blog.csdn.net/UbuntuTouch/article/details/131789900