Developers-Summit-2022_Improving-Digital-Customer-Experience-with-Enterprise_SearchAndObservability-20220218

>100 Views

February 18, 22

スライド概要

18-E-2 02/18 10:55 ~ 11:40
デジタルカスタマーエクスペリエンスの向上 - Enterprise Search と Observability
https://event.shoeisha.jp/devsumi/20220217/session/3724/

profile-image

ヴイエムウェア株式会社 ソリューションアーキテクト本部 プリンシパルエンタープライズアーキテクト。 Microsoft で13年間、テクニカルエバンジェリストとして .NET、Visual Studio、Windows、iOS、Android、Microsoft Azure 等の開発者向け最新技術啓発活動を実施。その後、Dell、Accenture、Elastic で開発者向け技術啓発活動等を経て現職。 モダンアプリケーション開発、マルチクラウド対応、アーキテクチャ策定等を中心に、技術者向けに最新技術の啓発活動を実施中。 2019年4月〜2021年8月迄、内閣官房 IT 総合戦略室 政府 CIO 補佐官を兼務、2021年9月〜2024年3月迄、デジタル庁 PjM ユニット ソリューションアーキテクトを兼務。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

デジタルカスタマーエクスペリエンスの向上 - Enterprise Search と Observability 鈴⽊ 章太郎 Elastic テクニカルプロダクトマーケティングマネージャー/エバンジェリスト デジタル庁 省庁業務グループ ソリューションアーキテクト

2.

Shotaro Suzuki Twitter : @shosuz Elastic Technical Product Marketing Manager/Evangelist デジタル庁 省庁業務グループ ソリューションアーキテクト 元 Microsoft Technical Evangelist

3.

l アジェンダ l l l なぜデジタルカスタマーエクスペリエンスが重要なのか Elastic アーキテクチャ、基本的な概念、クエリ Enterprise Search と Observability による カスタマーエクスペリエンス向上 まとめ

4.

なぜカスタマーエクスペリエンスが重要なのか

5.

なぜカスタマーエクスペリエンスが重要なのか 新規顧客の開拓、ロイヤルティと信頼の構築、そして⽣涯顧客の維持に不可⽋ 新しい顧客を獲得する お客様を逃さない お客様をサポートする

6.

パフォーマンスの⾼い Web サイトやモバイルアプリを作る 遅い Web サイト、使い勝⼿の悪いモバイルアプリは、アクセス放棄、収益の損失、⼆度と戻ってこない訪問者につながる 15秒ルール 測定、監視、最適化 Web サイトにたどり着いた後、 60%のユーザーは、求めている 情報が⾒つかるかどうかで、サイト に留まるか、バウンスするかを判断 Web サイトのパフォーマンスを維持する ためには、リアルタイムで観測可能な ツールが不可⽋

7.

Web サイトやアプリ検索がビジネスの成⻑に貢献する3つの⽅法 顧客からの問い合わせと、それに対応した結果を結びつけることで、最適な Web サイト・モバイルアプリ体験を実現 閲覧⾏動をアドバンテージに 顧客維持率の向上 コスト削減、カスタマーサクセスとセルフサービスに投資し、顧客が望むものを提供する

8.

Web サイトやモバイルアプリ検索の改善で考慮すべきこと ⽴ち上げに苦労せず、管理も簡単なものに細⼼の注意を払う 柔軟性のある既成のソリューションを利⽤する コンテンツの取り込みを効率化 直感的な UI で絞り込み検索が可能

9.

The Elasticsearch Platform In a world where endless data creates endless possibility, search helps people and organizations thrive. Enterprise Search Observability Security Kibana Explore, Visualize, Engage Elasticsearch Store, Search, Analyze Integrations Connect, Collect, Alert Public cloud Hybrid On-premises

10.

Elastic App Search • Elastic App Search は Elastic のエンタープライズサーチソリューションの⼀部 • お客様の Web サイトやアプリケーションにパワフルでスケーラブルな検索体験を追加するのに 必要なすべてのツールを提供

11.

Elastic Observability • Web サイト、インフラ、アプリケーションのエコシステムを完全に理解するために、⼀元化されたツールセットによる スケーラブルで包括的な監視システムを提供 • エコシステム全体の統⼀された可視性により、環境のあらゆる場所で発⽣するイベントを監視して対応し、 Web サイトのユーザーエクスペリエンスを向上

12.

Elastic Security ELASTIC SECURITY セキュリティを確保する ためのプラットフォーム Elastic Security は、エンドポイント セキュリティと SIEM を統合して、 インフラ ストラクチャ全体での保護を ⼀元化するための予防、収集、検出、 および応答機能を提供します。 Endpoint SIEM

13.

Elastic アーキテクチャ、基本的な概念、クエリ

14.

Elasticsearch の概念 - インデックス・ドキュメント・フィールド • • • • • • Elasticsearch は分散ドキュメント ストア 保存されるデータの最⼩単位が ドキュメント ドキュメントは、フィールドと呼ばれる 複数の属性を持つ インデックスはドキュメントの集合 Elasticsearch 具体例 の概念 SQL Server, MySQL, postgreSQL 等 インデックス 書籍データが格納 される場所 テーブル ドキュメント 書籍データ レコード フィールド 書籍タイトル、著者、 カラム ISBN、出版⽇、等 RESTful Web サービスの設計原則に従って設計 HTTP メソッドを使って CRUD による⼀通りのドキュメント操作が可能 https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

15.

Elasticsearch for VSCode https://marketplace.visualstudio.com/items?itemName=ria.elastic http://user:pass@host:9200 https://elastic:RHGj80iJUO6CF7WBUMiwyu 1x@8009bf958b6w5923b3c56983d4048df 824.japaneast.azure.elasticcloud.com:9243

16.

Books API からの書籍検索 https://booksindex.azurewebsites.net/ ASP.NET 5 Web App, (Blazor App) Azure SQL Database Azure Web Apps 検索・更新 UI VSCode APM .NET Agent ※ Logstash APM SPA Agent Elastic Cloud Reactive Search 検索専⽤ UI Azure VM (Linux) https://f79...c67.japaneast.azure.elastic-cloud.com:9243/ Azure Static Web Apps 東⽇本リージョン マスターノード x 1 データノード x 2 ML ノード x 1 https://brave-ocean-06f61b600.azurestaticapps.net/ Azure サブスクリプション ※ 今回は⼿動。同期⽅法例︓https://www.elastic.co/jp/blog/how-to-keep-elasticsearch-synchronized-with-a-relational-database-using-logstash

20.

Enterprise Search と Observability に よるカスタマーエクスペリエンス向上

21.

The Gallivant Web Shop

22.

Architecture of The Gallivant Web Shop DevOps Engineer React Client SecOps Engineer Search Cart End user Catalog Ordering Internet Marketer End user Actions Checkout Monitoring … Public Cloud Backend micro services Ship metrics & logs Elastic Stack

23.

検索のない世界から App Search がある世界へ No Search Great Search コアテクノロジー Elasticsearch コンテンツの格納 UI/UX 検索結果の コントロール APIs Search UI 分析 Web Crawler 検索結果 関連性チューニング オートコンプリート 検索の再現・テスト フィルター Dashboard ファセット機能

25.

マイクロサービスアーキテクチャの採⽤はメリットも多いが、 同時に問題発⽣時の根本的な原因を⾒つけるのが難しくなる

26.

Observability で解決できる主なビジネス課題 デジタルトランスフォーメーションの達成には新たなアプローチが不可⽋ 開発者、DevOps、 SRE の⽣産性 クラウドネイティブアプリと モノリシックなアプリの ⼀元管理 ⾼い信頼性 迅速な復旧 コストパフォーマンスの 最適化 リリースや運⽤に関する コストの最⼩化

27.

顧客やビジネスに悪影響を及ぼす前に、異常をプロアクティブに検出、 特定できるソリューション – Observability の必要性 アプリケーションのダウンタイムとパフォーマンス低下の原因トップ5 37% 11% 変更 セキュリティ 31% 5% コードのバグ アップグレード 16% 移⾏ 出典 : EMA

29.

Google Cloud ネイティブデータ統合 • • Google クラウドコンソールで数回クリックす るだけで、摩擦のないログの取り込み エージェントをインストールせずデータを 取り込む エージェントベース(Beats、Elastic Agent) とエージェントレスオプションの両⽅で柔軟性を 持たせる • エージェントレス統合 : - FireStore x App Search Pub/Sub Big Query Cloud Storage https://qiita.com/shosuz/items/9e375fea6f5016e4fc8f

30.

Firebase/Firestore ⽤ Elastic App Search 統合 https://www.elastic.co/jp/blog/accelerate-search-experiences-with-elastic-app-search-and-google-firebase • • • • アプリケーション内で効果的な検索 エクスペリエンスを構築することは困難 ユーザーはストアで商品を検索する場合も、 サポートサイトの記事を検索する場合も、 会社のブログに投稿する場合も、迅速な 結果を期待 拡張機能を使⽤して⾼速でスケーラブルで 関連性の⾼い検索エクスペリエンスを Firebase モバイルおよび Web ベースの アプリケーションに簡単に組み込める Elastic App Search エンジン作成と Firebase からのドキュメント受信の設定 Google Firebase 拡張機能ディレクトリ の Elastic App Search 拡張機能 アプリケーションに検索を追加するのに、 数回クリックするだけで開始できる https://firebase.google.com/products/extensions/firestore-elastic-app-search/

31.

Kotlin x Firebase サンプルアプリ構成 (CQRS) プロジェクト Android Mobile App Kotlin Cloud Function Firebase Firestore データ保存 Elastic APM Agent Firebase/Firestore ⽤ Elastic App Search 統合拡張機能 でノンコーディングで実現︕ Cloud Function で同期 Elastic エンタープライズサーチ App Search 内蔵の Reference UI で Elastic Web 版 React アプリの雛形⾃動⽣成 全⽂検索クエリ Search UI https://google-cloud-daydigital-2021.es.asianortheast1.gcp.cloud.es.io :9243 React Web App Elastic APM Agent VSCode 検索結果 northeast1-b リージョン マスターノード x 1 データノード x 2 ML ノード x 1 Elastic Cloud

34.

Azure x Elastic Deep Integration https://azure.microsoft.com/ja-jp/overview/linux-on-azure/elastic/#overview 運⽤を簡素化し、お客様の Azure 環境を最⼤限 に視覚化 Evaluate Requirements Customer Engagement • Azure 上のお客様のインフラストラクチャ、アプリ、 データの正常性、パフォーマンス、セキュリティを 監視する⽅法を効率化 • Azure portal 内で Elasticsearch の検索、 デプロイ、管理を簡単に⾏えるため、お客様が 必要なスピード、スケール、関連性を得られ、 お客様はビジネスに集中が可能 • Elastic on Azure でお客様のアプリや IT の検 索、分析、セキュリティを実現するには、こちらのソ リューション ガイドをお読みください Build Together Elastic Grow Extend Support

35.

Azure Spring Cloud ログとの統合 • • • • Spring Boot は Java アプリケーションで 最も使⽤されているフレームワーク Azure Spring Cloud という完全な マネージドサービスが Marketplace で提供 Elastic ユーザーは Azure Spring Cloud から Elastic Cloud にシステム、コンソール、 およびアプリケーションログを取り込める Spring Boot アプリで発⽣する問題を継続 的に監視およびデバッグできる https://docs.microsoft.com/ja-jp/azure/springcloud/how-to-elastic-diagnostic-settings

37.

AWS Serverless Application Repository (SAR) エージェントレスログ発送⽤の FireLens https://aws.amazon.com/jp/serverless/serverlessrepo/ https://www.elastic.co/jp/blog/elastic-and-aws-serverless-application-repository-speed-time-to-actionable-insights-with-frictionless-log-ingestion-from-amazon-s3 • AWS サーバーレスアプリケーションリポジトリ (SAR) で公開 された新しい AWS Lambda アプリケーション (ベータ版) を使⽤すると、ユーザーは仮想マシンのプロビジョニングやデータ シッパーのインストールのオーバーヘッドなしに、アーキテクチャを 簡素化し、データの取り込みを合理化できます。 • ユーザーは AWS コンソール内から数回クリックするだけで Amazon S3 から Elastic Cloud デプロイメントにログを 取り込むことができるようになりました。

38.

新しい Elastic と Amazon S3 Storage Lens の統合 管理を簡素化し、コストを管理し、リスクを軽減 https://www.elastic.co/jp/blog/new-elastic-and-amazon-s3-storage-lens-integration-simplify-management-control-costs-and-reduce-risk • 新しい Elastic と Amazon Simple Storage Service(Amazon S3)ストレージレンズの統合により、お客様は、他の AWS およびオンプレミスのデータセットとともに、Amazon S3 の使⽤状況とアクティビティの指標を組織全体で完全に把握できます。 • SRE と DevOps のエンジニアは、Elastic Search プラットフォームの強⼒な検索および分析機能(ダッシュボード機能、組み込みの 機械学習分析、しきい値ベースのアラートなど)を使⽤して、Amazon S3 Storage Lens のデータと環境全体の他のパフォーマンス 指標との関連付けやトレンドの特定を⾏うことができるようになりました。また、これらの知⾒は、アクセス頻度の低いオブジェクトを特定し、 より安価なストレージに移⾏することで、ストレージコストを最適化するために活⽤することができます。

39.

まとめ

40.

まとめ l l l なぜデジタルカスタマーエクスペリエンスが重要なのか Elastic 概要 Enterprise Search と Observability によるカスタマーエクスペリエンス 向上

41.

Elastic 8.0 リリースのご紹介︓ スピード、スケール、関連性、シンプルさの新時代 (2/24) https://www.elastic.co/jp/virtual-events/whats-new-in-elastic-8-0 Elastic 8.0 ベクトル検索機能の強化、最新の⾃然⾔語処理モデルのネイティブサポート、 簡素化されたデータオンボーディング、合理化されたセキュリティエクスペリエンスなど、 Elastic 8.0の新機能とアップデートについてご紹介します︕ 是⾮ご参加ください。

42.

デジタルイノベーション2022 オンライン (3/10) https://ers.nikkeibp.co.jp/user/contents/2022w0307dionl/index.html#A_A-441B Elastic Enterprise Search と Observability によるデジタルカスタマーエクスペリエンスの向上 Elastic はオープンでフリーな超⾼速検索エンジンとデータの出⼊⼒インターフェースから構成され、あらゆるパブリッククラウドにデプロイできる、業界をリードする検索・分析プラットフォームです。 Elastic により企業や個⼈は魅⼒的な顧客 Web サイト体験やモバイルアプリ体験を提供できます。このセッションでは、Elastic による実装をサンプルアプリのデモを交えながらご紹介してい きます。

43.

Observability Conference 2022 Co-located Events Hands-on https://event.cloudnativedays.jp/o11y2022/hands-on Elastic ソリューションアーキテクト による本イベント連携ハンズオン ワークショップ開催 (前⽇)︕ (3/10 14:00-18:00) URL: https://event.cloudnativedays.jp/o11y 2022/hands-on

44.

Elastic リソース • 公式ドキュメント • Elastic APM https://www.elastic.co/guide/index.html https://www.elastic.co/jp/apm/ • デジタルカスタマーエクスペリエンスの向上 • Configuration on .NET Core • 制限のないセキュリティ https://www.elastic.co/guide/en/apm/agent/dotnet/current/co nfiguration-on-asp-net-core.html • クラウドネイティブ アプリでの Elasticsearch • ASP.NET Core Quick Start • DevOps ライフサイクルの進化 https://docs.microsoft.com/ja-jp/dotnet/architecture/cloudnative/elastic-search-in-azure • Elastic APM Agent https://www.elastic.co/guide/en/apm/agent/index.html • Azure での検索データ ストアの選択 https://docs.microsoft.com/ja-jp/azure/architecture/dataguide/technology-choices/search-options https://www.elastic.co/guide/en/apm/agent/dotnet/current/set up-asp-net-core.html

45.

Elastic リソース 公式ドキュメント https://www.elastic.co/guide/index.html Elastic APM Agent https://www.elastic.co/guide/en/apm/agent/index.html Reactivesearch https://opensource.appbase.io/reactivesearch/ 優れた React 検索エクスペリエンスを迅速に構築する⽅法 https://www.elastic.co/jp/blog/how-to-build-great-react-search-experiences-quickly GKE サンプルソリューション GitHub レポジトリ https://github.com/michaelhyatt/k8s-o11y-workshop 関連ブログ https://www.elastic.co/jp/blog/kubernetes-observability-tutorial-k8s-cluster-setup-demo-app-deployment https://www.elastic.co/blog/kubernetes-observability-tutorial-k8s-log-monitoring-and-analysis-elastic-stack https://www.elastic.co/blog/kubernetes-observability-tutorial-k8s-metrics-collection-and-analysis https://www.elastic.co/blog/kubernetes-observability-tutorial-k8s-monitoring-application-performance-withelastic-apm

46.

Thank you for your attention!

47.

Appendix

48.

(参考) Logstash による Elasticsearch へのドキュメント⼀括挿⼊

49.

Logstash による Elasticsearch へのドキュメント⼀括挿⼊ https://docs.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-2017 sqlazuredb.conf という名前で作る

50.

Logstash インストール(macOS の場合) // brew の更新 brew update // Elasticsearch インストール brew install elasticsearch // サービスを⼀覧表⽰したり、サービス(Elastic など)起動もできる brew services list brew services start elasticsearch //Elastic が正常にインストールされたら、Logstash をインストール //このタスクを達成するために必要なのは、別の brew コマンドだけ brew install logstash //インストールが終わったら同じくサービス起動 brew services start logstash

51.
[beta]
Azure SQL Database ⽤設定ファイル(logstash.conf)のコード例 (1)
sqlazuredb.conf

com.microsoft.sqlserver.jdbc.SQLServerDriver

"jdbc:sqlserver://hostname.database.windows.net:1433;
database=AdventureWorksLT;encrypt=true; hostNameInCertificate=*.database.windows.net"
”<username>@hostname"
”<password>"
/Users/(username)/Documents/sqljdbc_8.4/jpn/mssql-jdbc-8.4.1.jre8.jar"
"com.microsoft.sqlserver.jdbc.SQLServerDriver"
"Select * from [SalesLT].[Customer]"

52.

Azure SQL Database ⽤設定ファイル(logstash.confB)のコード例 (2) sqlazuredb.conf filter{} output { stdout{ codec=>json_lines } elasticsearch{ cloud_id =>":bynGyXZ6lYXN0LmF6dXJlLmVs8w867943534egGKh6GBZXQITdk34XN0aWMtY2xvdWQuY29tOjkyN…DMkNzA===" cloud_auth => "elastic:pHkMI91iGYZ4DG9KCVNjxn2y” index=>"customer1" } }

53.

Logstash によるデータ取得と Kibana によるインデックスパターン作成・データの表⽰

54.

Elasticsearch CRUD 処理

55.

新しいドキュメントの作成 -1 • • • • • PUT booksbasic/_doc/1 { "id": "1", "title": ”Elastic ⼊⾨", "date":"Oct 1, 2020", "isbn": "ISBN123-4-56789-101-1", "author":{ "first_name": ”Shotaro", "last_name": ”Suzuki" } }

56.

新しいドキュメントの作成 -2 • • “title”: “title”: “title”: “title”: “title”: ”Elastic ⼊⾨ - Elasticsearch/Kibana/Logstash/Beats” ”Elastic & ASP.NET Core 3.x プログラミング” ”Elastic による AKS Log/Metric/APM 管理” ”Visual Studio Code による Elasticsearch プログラミング” ”Elastic Logstash/Beats 開発と管理 徹底解説”

57.

ドキュメントの取得 - 1 • • GET booksbasic/_doc/1/ (結果) { "_index": "books", "_type": "_doc", "_id": "1", "_version": 2, "_seq_no": 5, "_primary_term": 1, "found": true, "_source": { "title": "Elastic ⼊⾨", "date": "Oct 21, 2020", "isbn": "ISBN123-4-56789-101-1", "author": { "first_name": ”Shotaro", "last_name": "Suzuki" } } }

58.

ドキュメントの取得 – 2 _source のみ (結果) • { • "title": "Elastic ⼊⾨", "date": "Oct 21, 2020", "isbn": "ISBN123-4-56789-101-1", "author": { "first_name": "Shotaro", "last_name": "Suzuki" } GET booksbasic/_doc/1/_source }

59.

ドキュメントの検索 – 1 全てのデータを検索 • • • took – Elasticsearchが検索を実⾏するのにミリ秒単位の時間 timed_out –検索がタイムアウトしたかどうかを⽰します _shards –検索されたシャードの数と、検索されたシャードの成功/失敗の数を⽰す hits –検索結果 hits.total –検索条件に⼀致するドキュメントの総数 hits.hits –検索結果の実際の配列(デフォルトは最初の10ドキュメント) POST booksbasic/_doc/_search { ”query": { “match_all” : {} } } hits.sort -結果のソートキー(スコアでソートする場合は⽋落) https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

60.

ドキュメントの検索 – 2 シャードとは • • • • • • コンテンツボリュームを⽔平に分割/スケーリングすることが可能 シャード間(場合によっては複数のノード上)で操作を分散および並列化できるため パフォーマン ス/スループットが向上 https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

61.

ドキュメントの特定のデータの検索 – クエリ DSL とは︖ • • POST booksbasic/_doc/_search { "query": { "match" : { "title" : ”Elastic" } } } Elasticsearch データをクエリする⽅法はたくさんあります。詳細についてはこちら。 https://www.elastic.co/guide/en/elasticsearch/guide/current/_most_important_queries.html

62.

ドキュメントの更新 - 1(データの変更) • POST booksbasic/_doc/1/_update { "doc": { "title": "Elastic ⼊⾨ Elasticsearch/Kibana/Logstash/Beats" } } GET booksbasic/_doc/1 { "title": "Elastic ⼊⾨ – Elasticsearch/Kibana/Logstash/Beats", "date": "Oct 21, 2020", "author": { "first_name": "Taro", "last_name": "Sato" } }

63.

ドキュメントの削除(データの削除) • DELETE booksbasic • DELETE booksbasic/_doc/3

64.

ASP.NET Core x NEST

65.

新しい ASP.NET Core Web アプリ作成 dotnet new mvc

66.

Model の作成 • • Elasticsearch のデータ から JSON にシリアライズ のため必要 Book という名のクラスを 追加 public class Book { public string Title { get; set; } public string Isbn { get; set; } public int PageCount { get; set; } public string ThumbnailUrl { get; set; } public string ShortDescription { get; set; } public string LongDescription { get; set; } public string Status { get; set; } public string Authors { get; set; } public string Categories { get; set; } }

67.

Elasticsearch への接続を作成 • NEST ライブラリ追加 dotnet add package NEST • Program.cs への追加 using Elasticsearch.Net; using Nest; using Elastic.Apm.NetCoreAll; === var pool = new SingleNodeConnectionPool //ローカル実⾏の場合 (new Uri(“http://localhost:9200”)); var settings = new ConnectionSettings(pool) .DefaultIndex("books"); var client = new ElasticClient(settings); services.AddSingleton(client); --//Elastic APM 追加 app.UseAllElasticApm(builder.Configuration); app.UseHttpsRedirection(); app.UseBlazorFrameworkFiles(); app.UseStaticFiles(); ---

68.

Elasticsearch への接続を作成 - Elastic Cloud ⽤ • var pool = new SingleNodeConnectionPool (new Uri(http://localhost:9200/)); // Elastic Cloud デプロイ時に取得した値3つ (例) https://elastic:oRHGj80iJUO6CF7WBUMiwyu1x@8009bf958 b6w5923b3c56983d4048df824.japaneast.azure.elasticcloud.com:9243

69.
[beta]
Search ⽤の HTML を作成 (index.cshtml 編集)
•

•
•
•
•

@model を
[ISearchResponse]<Book>
に設定
これは Elasticsearch 呼び出し
からの応答のタイプ
検索クエリをサーバーにポストバック
できる HTML フォームを追加
Elasticsearch に渡して結果をレ
ンダリング
⼀致するドキュメントのタイトルと
ISBN をレンダリングする単純な
ループを追加

@model Nest.ISearchResponse<Book>
<form asp-controller="Home" asp-action="Index"
method="post">
<input type="text" name="query" />
<input type="submit" value="Search" />
</form>
@if (Model.Documents.Any())
{
<h3>検索結果</h3>
<ul>
@foreach (var book in Model.Documents)
{
<li>Title: @book.Title (ISBN:
@book.Isbn)</li>
}
</ul>
}

70.
[beta]
Elasticsearch クエリー ① MatchAll
•

インデックス内の全てのドキュメントを返す
クエリ
≒ RDBMS の "SELECT *" クエリ

private readonly ElasticClient _client;
public HomeController(ILogger<HomeController> logger, ElasticClient client)
{
_logger = logger;
_client = client;
}
•

public IActionResult Index()
{
var results = _client.Search<Book>(s => s
.Query(q => q
.MatchAll()
)
);
return View(results);
}

71.
[beta]
Elasticsearch クエリー ② Term
•
public IActionResult Index()
{
ISearchResponse<Book> results;
if (!string.IsNullOrWhiteSpace(query))
{
var results = _client.Search<Book>(s => s
.Query(q => q
.Term(t => t)
.Field(f => f.Isbn)
.Value(query)
)
)
);
}
else
{
.Query(q => q
.MatchAll()
)
);
…

⽤語クエリ
正確なクエリに⼀致するドキュメントを
⾒つける

72.
[beta]
ユーザーにテキストを⼊⼒し、そのテキス
トをドキュメント内のコンテンツの任意の
部分と⼀致させる

Elasticsearch クエリー ③ Match
•

public IActionResult Index(string query)
{
ISearchResponse<Book> results;
if (!string.IsNullOrWhiteSpace(query))
{
results = _client.Search<Book>(s => s
.Query(q => q
.Match(t => t
.Field(f => f.Title)
.Query(query)
)
)
);
}
else
{
…

[重要な点]
• 複数のドキュメントを照合
• すべての⼀致する⽂書には、タイトル
に、当該テキストが含まれる
•
•
•

⼩⽂字で指定したのにマッチする
この動作はカスタムアナライザーで 上
書き可能
これは別の⾼度なトピック

•

Elasticsearch でサポートされる
クエリは他にも多数

•

Term クエリと Match クエリは
本的ユースケース

基

73.

Elasticsearch Aggregations ー 集計

74.

Elasticsearch Aggregations ー 範囲集計 • … results = _client.Search<Book>(s => s .Query(q => q .MatchAll() ) .Aggregations(a => a .Range("pageCounts", r => r .Field(f => f.PageCount) .Ranges(r => r.From(0), r => r.From(200).To(400), r => r.From(400).To(600), r => r.From(600) ) ) … [重要な点] • MatchAll クエリに加えて、集計メソッ ドを使⽤ • "範囲" 集計を指定 • Index.cshtml も編集必要

75.

Elasticsearch Aggregations ー 条件集計 • • • • タグバブルやファセットUIシステム のユースケース ⽤語集計 ≒ RDBMS の“GROUP BY”句 ドキュメント間でさまざまな単語(ま たは「⽤語」)に関する統計を取 得可能 • Index.cshtml も編集必要 • … ) .Aggregations(a => a .Range("pageCounts", r => r .Field(f => f.PageCount) .Ranges(r => r.From(0), r => r.From(200).To(400), r => r.From(400).To(600), r => r.From(600) ) ) .Terms("categories", t => t .Field("categories.keyword") ) ) … フィールド値が⽂字列 “categories.keyword” に 設定されているのは、⽤語の集計は負荷の⾼い操 作であり、通常は "text" フィールドでは実⾏されな いため

76.
[beta]
Search ⽤の HTML を修正 (index.cshtml 編集)
@model Nest.ISearchResponse<Book>
<form asp-controller="Home" asp-action="Index" method="post">
<input type="text" name="query" />
<input type="submit" value="検索" />
</form>
@if (Model.Documents.Any())
{
<h3>検索結果</h3>
<ul>
@foreach (var book in Model.Documents)
{
<li>Title: @book.Title (ISBN:
@book.Isbn)</li>
}
</ul>
}

@if (Model.Aggregations != null)
{
<h3>集計</h3>
@if (Model.Aggregations.ContainsKey("pageCounts"))
{
<h4>ページ数 (範囲)</h4>
<ul>
@foreach (var bucket in
Model.Aggregations.Range("pageCounts").Buckets)
{
<li>@bucket.Key: @bucket.DocCount</li>
}
</ul>
}
@if (Model.Aggregations.ContainsKey("categories"))
{
<h4>カテゴリ (Terms)</h4>
<ul>
@foreach (var bucket in
Model.Aggregations.Terms("categories").Buckets)
{
<li>@bucket.Key: @bucket.DocCount</li>
}
</ul>
}
}

77.

便利な機能のご紹介 - ReactiveSearch

79.

ブートストラッププロジェクト プロジェクトをスキャフォールディング するために必要なステップ ● ● ● ● ● ● Elasticsearch クラスター作成 データセットの取得 データセットを Elasticsearch にインポートする React プロジェクトの作成 Reactive search インストール <ReactiveBase /> での Elasticsearch への接続

80.
[beta]
ReactiveSearch
実装例
Elasticsearch への接続
<ReactiveBase
app="yelp"
url="YOUR_ELASTICSEARCH_CLUSTER_URL"
// 他のコンポーネントがこの中に配置される
<div>
Hello ReactiveSearch!
</div>
</ReactiveBase>

<DataSearch /> サンプルコード
<DataSearch
componentId="SearchSensor"
dataField={["name", "name.search",
"name.autosuggest"]}
onValueSelected={(value, cause, source) => {
console.log("value", value);
console.log("source", source);
}}
/>

検索フィールドの追加
<DataSearch
componentId="SearchSensor"
dataField={[
"name",
"name.search",
"name.autosuggest",
"city",
"city.search",
"city.autosuggest"
]}
onValueSelected={(value, cause, source) => {
console.log("value", value);
console.log("source", source);
}}
/>

フィールド内の重み付け
<DataSearch
componentId="SearchSensor"
dataField={[
"name",
"name.search",
"name.autosuggest",
"city",
"city.search",
"city.autosuggest"
]}
fieldWeights={[3, 1, 1, 2, 1, 1]}
onValueSelected={(value, cause, source) => {
console.log("value", value);
console.log("source", source);
}}
/>

<MultiList />サンプルコード
<MultiList
componentId="CategorySensor"
dataField="categories.keyword"
/>

<ReactiveList /> サンプルコード
<ReactiveList
componentId="SearchResult"
react={{
and: ['CategorySensor’,
'SearchSensor'],
}}
renderItem={res =>
<div>{res.name}</div>}
/>

<ReactiveMap /> サンプルコード
import { ReactiveOpenStreetMap } from
'@appbaseio/reactivemaps';
<ReactiveOpenStreetMap
componentId="SearchResult"
react={{
and: ['CategorySensor',
'SearchSensor'],
}}
dataField="location"
/>

Add Map Styles の追加
<link rel="stylesheet”
href="https://cdnjs.cloudflare.com/ajax/libs
/leaflet/1.3.4/leaflet.css"/>

81.

ReactiveSearch インストール yarn add @appbaseio/reactivesearch https://docs.appbase.io/docs/reactivesearch/v3/overview/quickstart/

82.

Elasticsearch への接続 <ReactiveBase app="yelp" url="YOUR_ELASTICSEARCH_CLUSTER_URL" // 他のコンポーネントがこの中に配置される <div> Hello ReactiveSearch! </div> </ReactiveBase> https://docs.appbase.io/docs/reactivesearch/v3/overview/quickstart/

83.

Restaurant Search

84.
[beta]
<DataSearch /> サンプルコード
<DataSearch
componentId="SearchSensor"
dataField={["name", "name.search",
"name.autosuggest"]}
onValueSelected={(value, cause, source) => {
console.log("value", value);
console.log("source", source);
}}
/>

https://docs.appbase.io/docs/reactivesearch/v3/search/datasearch/

85.
[beta]
検索フィールドの追加
<DataSearch
componentId="SearchSensor"
dataField={[
"name",
"name.search",
"name.autosuggest",
"city",
"city.search",
"city.autosuggest"
]}
onValueSelected={(value, cause, source) => {
console.log("value", value);
console.log("source", source);
}}
/>
https://docs.appbase.io/docs/reactivesearch/v3/search/datasearch/

86.
[beta]
フィールド内の重み付け
<DataSearch
componentId="SearchSensor"
dataField={[
"name",
"name.search",
"name.autosuggest",
"city",
"city.search",
"city.autosuggest"
]}
fieldWeights={[3, 1, 1, 2, 1, 1]}
onValueSelected={(value, cause, source) => {
console.log("value", value);
console.log("source", source);
}}
/>
https://docs.appbase.io/docs/reactivesearch/v3/search/datasearch/

87.

Restaurant Category Filter

88.

<MultiList />サンプルコード <MultiList componentId="CategorySensor" dataField="categories.keyword" /> https://docs.appbase.io/docs/reactivesearch/v3/search/multilist/

89.

Restaurants Search Result

90.
[beta]
<ReactiveList /> サンプルコード
<ReactiveList
componentId="SearchResult"
react={{
and: ['CategorySensor', 'SearchSensor'],
}}
renderItem={res => <div>{res.name}</div>}
/>

https://docs.appbase.io/docs/reactivesearch/v3/search/reactivelist/

91.

Restaurant Locations

92.

ReactiveMap インストール yarn add @appbaseio/reactivemaps 参考︓ renderalldata https://docs.appbase.io/docs/reactivesearch/v3/map/reactiveopenstreetmap/

93.
[beta]
<ReactiveMap /> サンプルコード
import { ReactiveOpenStreetMap } from
'@appbaseio/reactivemaps';
<ReactiveOpenStreetMap
componentId="SearchResult"
react={{
and: ['CategorySensor', 'SearchSensor'],
}}
dataField="location"
/>
https://docs.appbase.io/docs/reactivesearch/v3/map/reactiveopenstreetmap/

94.

Add Map Styles の追加 • OpenStreetMap / GoogleMaps を使⽤するには、インデックスにスタイルを 追加 • index.html またはコードベースにインポート可能 <link rel="stylesheet” href="https://cdnjs.cloudflare.com/ajax/libs/ leaflet/1.3.4/leaflet.css"/>

95.

他の事例

96.

事例︓ソフトバンク・ペイメント・サービス株式会社 オンライン決済サービスの監視を⽀える Elastic Stack ECサイト向けに様々な決済⼿段を提供 / 加盟店に決済画⾯は決済APIを提供するシステム(年間取引額2兆円、2億件以上のトランザクション) オンライン決済サービスの状況をほぼリアルタイムで可視化 • ダッシュボードで、成功した決済はグリーン、失敗したものはレッド、決済⼿段ごと に OK/NG の⽐率の推移を俯瞰。「1. グリーンが急激に少なくなったら要注意。2. レッドが急激に多くなったら要注意。」 • 誰でも、いつでも、どこでも、簡単に、サービスの状況を把握 • 障害以外でも、爆売れ、不正利⽤といった、加盟店の変化に気がつく • エンジニアの決済トランザクションへの関⼼が⾼まる Machine Learning で決済トランザクションの異常を検知 • 決済トランザクションの合計の⽇次の増減を3周期で学習し、それが予測した範囲 から⼤きく外れれば、異常として検出 • 可視化だけでは埋蔵してしまう変化を ML にて新たに発⾒ 可視化をビジネスデータにまで広げる • 2年分の売上推移を部署別・案件別に表現。ヒートマップで営業部⾨や個⼈の⽬標 達成率を表現。年間の加盟店契約の獲得状況を都道府県マップに表⽰ • サービスサイト閲覧状況を、アクセス元の IP アドレスから企業名を推定し、契約 済み企業からのアクセス、未契約企業からのアクセスランキングを作成 • ⾮エンジニアでもデータ投⼊からダッシュボードの作成までできる https://www.elastic.co/jp/customers/softbank-payment-service

97.

事例︓株式会社リコー すべてのログを Elastic Stack 上に集約。35 ノードで1 ⽇2TB のログを監視 「リコーグループ全システムの IT デバイスで発⽣する1 ⽇2 テラバイトにおよぶログが、すべて Elastic Stack に送り込まれます。これを35ノード、約400テラバ イトのクラスターで処理します。インデックス数は約10,000 でサイズは約250 テラバイト。ドキュメント数は3,450 億にも及びますが、これは昨年12 ⽉の話で、 現在はさらに増えている状況です」と話す。Elastic Stack の製品については、Elasticsearch、Logstash、Kibana、Filebeat、Packetbeat、 Winlogbeat、Monitoring、Alerting 等が使⽤されており、特に⾒える化でキーとなる Kibana については、セキュリティ統括部のオフィス室内で、⼤型 モニターに常時チャートが表⽰され、担当者がシステムの状況をリアルタイムかつ直感的に把握できるようになっている。 https://www.elastic.co/jp/customers/ricoh

98.

事例︓ブローダービズ株式会社 機械学習を駆使して時系列の映像データを解析。⾷品製造⼯場での作業を"⾒守り"、 異常⾏動発⽣をリアルタイムに検知してトラブルを回避 ⾷品偽装防⽌と働き⽅改⾰ 課題 •⻑時間にわたる⼯場作業を、管理者の⽬のみによって監視し続 けることは容易ではない •担当者は、制服、帽⼦、マスクを着⽤しているため、⾒た⽬だけ では個⼈の特定が困難 •定量化された数値などによって状況を把握・記録することができ ず、過去と照らし合わせることも困難 •録画されたビデオ映像は、問題が発⽣した後の証跡として利⽤ できるが、瞬時の対応には不向き Solution ⼈⼿による作業を、AI を駆使したシステムによって“⾒守り”、担 当者の姿勢やある時間内での⾏動を、数値化された統計値との ⽐較し、通常の⾏動を逸脱した異常事態の発⽣を瞬時に判断 することで、トラブルの拡⼤を未然に防ぐという仕組みの実現。 NEDO(国⽴研究開発法⼈新エネルギー・産業技術総合開 発機構)の共同開発⽀援事業として認められた。 https://www.elastic.co/jp/customers/broaderbiz

99.

事例︓⽇本経済新聞社 ⽇経電⼦版の記事検索およびログ解析の両⽅を1つの仕組みで実現 利⽤範囲の広さで Elasticsearch を採⽤ Elasticsearch を選定したのは、記事検索とログの可視化の両⽅に 使える利⽤範囲の広さが最⼤の理由 15台のクラスタ構成で、1秒あたり9000リクエスト以上という⾼い 性能を発揮 記事検索とログ解析に Elasticsearch を活⽤ ⽇経電⼦版の記事は、5年分で約200万件、データサイズは5GB。記事の更新は、1⽇あたり数千回、ピーク時には1分間に300件程度の記事が更 新。検索における利⽤者からのアクセスは、1秒あたり100回程度だが、1秒あたり数千回のアクセスも想定 ログ解析で Elasticsearch を利⽤した最⼤のメリットは、専⾨的な深い知識がなくてもログ解析が可能になること。Elasticsearch と Kibana を利⽤ したログ解析により、たとえば、記事検索のレスポンスにどれくらいの時間がかかっているかを容易に解析でき、アプリケーションのどこにボトルネックがあるのか、 改善するべき機能はどこなのかを迅速に把握できる “Elasticsearch と Kibana を活⽤することで、エンジニア秘伝の“タレ( shell 芸)”を使って可視化していたログ解析を URL や、画 像で即座に社内共有できるようになりました。これまではログ解析ができるエンジニアが2⼈しかいなかったのですが、Elasticsearch と Kibana を利⽤することで、秘伝のタレが不要になり、ログ解析ができるエンジニアを6⼈以上に増やすことができましたようになりました。" – 日本経済新聞社 デジタル編成局 編成部 梅崎裕利氏 https://www.elastic.co/jp/customers/nikkei

100.

事例︓スイス・ライフ Elasticsearch が⽣み出す360°の顧客管理 Elasticsearch で1000万⼈の顧客データのインデックス作成から分析、パブリッシュまでリアルタイムに実⾏ スイス・ライフにおける課題 スイス・ライフは保険や資産管理サービスを⼿掛ける⼤⼿企業で、フランスでは個⼈向け保険商品を主⼒に⾼いシェアを持つ スイス・ライフ・フランスの1000万⼈の顧客情報に対し、さまざまなフォーマットや、さまざまなタイプのユーザアクセスにより、データへの均質なアクセスを 維持することが難しくなり、情報が「サイロ化」していた Elasticsearchによる解決 スムーズな運⽤と、情報への均質なアクセスを実現させるため、スイス・ライフ・フランスは Elasticsearch で顧客データのインデックスとパブリッシュを⾏った あらゆる顧客の窓⼝となる Web サイトとモバイルアプリケーションにデータを提供するため、まず Elasticsearch ですべての顧客データを1か所に集約 顧客記録、契約データ、マーケット分類データ、年⾦と保険スコアのすべての情報を横断してリアルタイムにクエリ。 すべての顧客がポータルサイトにアクセスでき、顧客情報と契約情報をすばやく取得できる機能を提供。また、情報が更新された場合、ソースシステムで 10秒以内にインデックスを作成。 “スピードと信頼性は不可⽋です。Elasticsearch がデータをリアルタイムにインデックスするようになり、すべてが進 化しました。" – クリスチャン・ファン・チョン, スイス・ライフ・フランス、チーフエンタープライズアーキテクト https://www.elastic.co/jp/customers/swiss-life

101.

事例︓PSCU(⽶国有数の信⽤組合サービス組織) Elastic は信⽤組合に対する数百万ドル相当の不正⾏為被害を防⽌することでリスク回避を実現 Elastic 製システムをデプロイしてからわずか18か⽉間で、3,500万ドルもの不正⾏為を阻⽌ PSCU における課題 PSCUは、⽶国有数の信⽤組合サービス組織で1,500の信⽤組合にサービスを提供し、年間38億件もの取引を扱う。 会員に対して⽀払い処理、リスク管理、データ分析、オンラインバンキング、モバイルプラットフォームなどさまざまな⾦融サービスを提供 年⽉が経つにつれデータベースが巨⼤化しデータ⼊⼒が困難になり、前⽇のデータを読み込むのに丸1⽇かかる状態で適切なタイミングで不正検知 ができていなかった。 Elasticsearch による解決 会員のオンラインログイン、IP アドレス、住所、サポートセンターへの問い合わせ履歴など、数多くのデータソースを Elasticsearch に集約しログを可視化 当初は内部の不正⾏為検知が⽬的であったが問題なく稼働したため、さらに全⽶1500の信⽤組合の外部からの不正⾏為を阻⽌できるよう、幅広い⾦ 融関連データソースからのログを追加 機械学習を使⽤した不正検知を導⼊し導⼊後18ヶ⽉で3,500万ドルもの不正⾏為を阻⽌ 単なる不正検知にとどまらず、災害発⽣時の地域で検知された平時と異なる⾏動(⾼価な発電機、⼤量の⽸詰などを突然購⼊するなど)をブロックしな い機能なども追加 "Elastic Stackを構築したことで、不正⾏為を従来よりもはるかに簡単に検知できるようになりました。Elasticプラットフォームに⼊⼒ するデータベースを⼤幅に増やしたことで、従来は決して気付かなかったデータの特徴をとらえられるようになりました。現在では、発⽣中 の不正⾏為を検知できるだけでなく、発⽣前にそれを検知できるようになりました。" – ジョナソン・ロビンソン氏, PSCU、不正インテリジェンス部門マネージャー https://www.elastic.co/jp/customers/pscu

102.

事例︓古野電気株式会社 船舶運航の安全・安⼼・効率化を⽀えるサービスを提供 データ・分析結果を得るまでの平均時間(MTTR)の短縮率 94% 差別化されたカスタマーエクスペリエンス 古野電気は、同社の Elastic オブザーバビリティソリューショ ンの⼀部として Kibana と Elastic Maps を採⽤したこと で、船上でのデータ使⽤に関するデータ・分析結果をより多 く得られるようになっています。それらのデータ・分析結果は、 お客様の船舶と陸上の接続コストとパフォーマンスの改善に 役⽴ちます。 コストパフォーマンスに優れたプロアクティブなサービスを提 供 今後発⽣しそうな機器の障害、予兆を検知し、予防保守 を⾏う必要があれば、修理内容を特定し、部品を迅速に⼿ 配することで費⽤を抑えながら効果的な対応をご⽀援しま す。 安全で効率的な航⾏を実現 古野電気は、Elastic Cloud の Elasticsearch Service を活⽤することで、ライフサイクルソリューションを効 果的に多くのお客様へ展開することができます。また、お客 様のニーズにより最適なサービスプランをパッケージ化し販売 することで、安全で効率的な航⾏へ貢献します。 https://www.elastic.co/jp/customers/furuno