Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Azure サービスを活用して作る
フルマネージドな全文検索アプリケーション
Yoichi Kawasaki
Azure Technology Solution Professional
Asia Global Black Belt
Slide...
アジェンダ
• 導入編
• Azure Search概要
• Azureを活用した検索サービス事例
• 実践編
• アプリケーション開発
• モニタリング・分析
• Q&A
Azureサービスを使った検索サービス構築
Azure Search
• 強力かつ豊富な検索機能をシンプルなプロトコル
とAPIで提供
• 完全マネージドでスケーラブル
• 充実した自然言語解析、ランキング調整機能
検索の専門的な知識不要で容易にリッチ検索アプリの構築を可能と
し、また完...
検索エクスペリエンス
地理空間検索
全てAzure Searchの機能で実現しています
http://azjobsdemo.azurewebsites.net/
シンプルなAPIとフォーマット
インデックス追加・更新 /indexes/<indexname> PUT
インデックス一覧表示 /indexes GET
インデックス統計情報取
得
/indexes/<indexname>/stats GET
...
Azure Search アーキテクチャ全図
QueryParser Search
Engine
Analyzer
IndexWriter
インデックスSimple lucene
Analyzed
terms
Query
terms
Query...
2種類のインデックス更新方式
IndexWriter
Indexer REST API
インデクサーによる定期更新
• インデクサーの定期的実行による更新: 最小5分
• 変更、削除検知し差分実行
• データソースのフルクロール可
インデクシン...
スケーラビリティ - 検索・データ
1 ~ 12
1 ~ 12
オンラインでスケール設定可能
APIやポータルからオンラインでスケール設定変更が可能
パーティション
レプリカ
多様な検索対象データ
 データソース
 ファイル(BLOB)、DRMBS、NoSQLなど
 データの種類
構造化データ 非構造化データ
• カタログ検索
• ウェブ検索
• XML/JSONデータ検索
• PDF、オフィスドキュメント
•...
メディア x 音声認識 x 機械翻訳 x 全文検索
https://github.com/shigeyf/ai-digitalmedia
Azureサービスを活用した検索サービス事例
国立大学法人岐阜大学 IR情報基盤
https://www.microsoft.com/ja-jp/casestudies/gifu-u.aspx
Azureサービスを活用した検索サービス事例
富士フィルムソフトウェア株式会社様 - 「IMAGE WORKS」
• Azure の PaaS を最大限に活用しサービスの安定性、拡張性、利便性の飛躍的向上
• Cosmos DB (NoSQL)...
全文検索
アプリケーション開発
サンプルアプリケーション
 Q&Aナレジッジベース全文検索アプリ
 サンプルソースコード
 https://github.com/yokawasa/azure-search-qna-demo
サービスのプロビジョニング
 ポータルでアカウント作成
 アカウント名設定
 リージョン設定
 SKUの選択
 Free, Basic, Standard
S1,S2,S3
途中でSKUの変更ができ
ないのであらかじめ余裕
を持ったK...
インデックスの作成
管理ポータルもしくはAPI経由でインデックスのスキーマ定義を行う
スキーマで定義するのは大きく次の3つ
• 検索フィールド
• 主キー
• データ型: String, Collection(string list), Int...
アナライザーの選択
• アナライザーとは?
• インデックス生成処理とクエリ処理の両方で実行されるテキスト解析処理
• フィールド単位で個別のアナライザーを設定可能
• 2種類の言語別アナライザー
• Luceneアナライザー
• Apache...
スキーマ変更に関する注意点
スキーマの更新は限定的にサポート
〇
✖
• 新しいフィールドの追加
• 新しいフィールドが追加されると既存ドキュメントの追
加フィールドの値はNULL扱い
• 既存フィールドの種類変更、削除
インデックス作成 – 管理ポータル1
基本設定
フィールド属性
アナライザー
設定
サジェスタ設定
インデックス作成 – 管理ポータル2
基本設定
フィールド属性
アナライザー
サジェスタ設定
スコアリング
プロファイル設定
CORS設定
インデックス作成 – REST API
POST /indexes?api-version=2016-09-01
Host: qnademo.search.windows.net
api-key: 91FAB1CDBD75CF1D3949104...
インデックス更新 – 直接PUSH
APIにドキュメントを直接POSTしてリアルタイム に近いデータ 更新が可能
更新内容反映までの時間はその時のシステムの負荷状況により異なります
POST /indexes/qna/docs/index?ap...
インデックス更新 – インデクサー利用
• インデクサーの設定により、特定のデータ
ソースから定期的に更新データをポーリング
してインデックスの更新をすることが可能
• 設定方法
• 管理ポータル経由で設定: 比較的簡単に設定可能、
ただし一部...
インデクサーによる更新設定 - 管理ポータル
①データソース登録
②ターゲット
インデックス設定
③インデクサー登録
Cosmos DBをデータソースとしたインデクサー設定例(更新対象インデックスqna)
インデクサーによる更新設定 – REST API
Cosmos DBをデータソースとしたインデクサー設定例(更新対象インデックスqna)
POST /datasources?api-version=2016-09-01
Host: qnadem...
検索クエリによるドキュメント取得
エンドポイント (METHOD:GET)
https://<アカウント名>.search.windows.net/indexes/<インデックス名>/docs
&search=keyword
&searchMo...
Q&Aアプリ - 検索クエリ解説
エンドポイント (METHOD:GET)
/indexes/<インデックス名>/docs
api-version=2016-09-01
$top=50
$select=id,question,answer,ca...
サジェッション
入力したキーワード文字列に関連の深い語句を逐次予測して表示するための機能
事前に検索対象フィールドをサジェスタ(suggesters)登録する必要があります
"suggesters": [
{
"name":"questions...
Q&Aアプリ - サジェスションクエリ解説
エンドポイント (METHOD:GET)
/indexes/<インデックス名>/docs/suggest
api-version=2016-09-01
$top=10
select=question
...
オートコンプリートUX - typeahead.js
https://github.com/twitter/typeahead.js
• オートコンプリートのユーザーエクスペリエンス
を簡単に実装できる
• 大きくBloodhoundとType...
ファセット・ナビゲーション
ドリルダウンナビゲーションを提供するフィルター処理の一種
スキーマでfacetable:true、filterable:trueで登録されているフィールドを使用
して、クエリ時に作成します
{
"name":”cat...
検索精度のチューニングについて
検索精度チューニングのための主要設定箇所は以下4点
ポイント 役割 設定箇所
アナライザー テキストのトークン化 インデックススキーマ
クエリ トークンの絞り込み、マッチング
の挙動と結果評価の制御
クエリパラメ...
Azure Search UIライブラリ- AzureSearch.js
https://github.com/Yahnoosh/AzSearch.js • Azure Searchプロダクトチーム主要開発者によ
り開始されたOSSライブラリ(...
モニタリング・分析
検索ログ・メトリックスの有効活用
• 検索オペレーションログやメトリックスの自動収集をポータルで有効化
• 収集データはAzure Storageに保存
ポータルで機能有効化と保存先ストレージの選択 オペレーションログ メトリックス
保存
コン...
検索ログサンプル
{
"time": "2016-05-07T09:15:24.3901416Z",
"resourceId": "/SUBSCRIPTIONS/87C7C7F9-0C9F-
47D1-A856-1305A0CBFD7A/RES...
ログ分析: Power BIによる可視化
• ストレージにアーカイブされたログはPower BI連携により簡単に可視化が可能
• 連携はAzure Search用Power BIコンテンツパックを利用
https://powerbi.micro...
検索トラフィック分析 - App Insights連携
• Application Insightsと連携することでより具体的なトラフィックの分析を実
装することが可能です。ユーザーとその行動に関する洞察を明らかにするこ
とができます。
• 必...
APPENDIX
Free Basic Standard S1 Standard S2
Maxサービス数 1 12 12 6
Maxインデック
ス数/サービス
3 5 50 200
Maxドキュメン
ト数/サービス
1000
0
100万 1500万/P
(1....
Cognitive Services: 人工知能サービスAPI群
画像認識、音声認識、テキスト認識など、ディープ ラーニング手法による大きなコンピューティング
パワーを必要とする処理などを Azure の API Service として提供。 ...
AI x Search - 非構造化データ検索実装例
Liberty Of Corom
• プロジェクト概要
• スマホ、メール、スキャナを問いしてアップロードされたドキュメントや画像をデータ解析パイプライ
ンにかけて検索可能にするための一連の...
• プロジェクト概要
• メディア x 音声認識 x 機械翻訳 x 全文検索
• ウェブフロント(コンテナ)、データ生成ワークフロー
全てサーバレスで実現
• ワークフロー
• ストレージコンテナにアップロードされた動画ファイル
をAzure ...
ウェブクローリングシナリオ実装例
PythonスクレイピングフレームワークであるScrapyを利用したウェブクローリングシナリオ実装例
1. Scrapyにより特定サイト内コンテンツを
スクレイピング
2. スクレイピングで取得されたデータを
...
Azure サービスを活用して作るフルマネージドな全文検索アプリケーション
Upcoming SlideShare
Loading in …5
×

Azure サービスを活用して作るフルマネージドな全文検索アプリケーション

1,976 views

Published on

This is slides for Azure Webinar Seminar: Azure Search

今日、検索機能は、eコマース 、SNS、モバイルアプリなどさまざまなサービスにおいてユーザーの主要な操作手法として当たり前のように活用されています。本ウェビナーではモダンアプリケーションを題材にAzure SearchやAzureの主要PaaSサービスを活用した完全マネージドな全文検索アプリケーションの構築方法についてご紹介いたします。

【アジェンダ】
1. 検索機能概要とアプリケーションアーキテクチャ
2. サーチアプリケーション開発

Published in: Technology
  • Be the first to comment

Azure サービスを活用して作るフルマネージドな全文検索アプリケーション

  1. 1. Azure サービスを活用して作る フルマネージドな全文検索アプリケーション Yoichi Kawasaki Azure Technology Solution Professional Asia Global Black Belt Slides for Azure Webinar: Azure Search
  2. 2. アジェンダ • 導入編 • Azure Search概要 • Azureを活用した検索サービス事例 • 実践編 • アプリケーション開発 • モニタリング・分析 • Q&A
  3. 3. Azureサービスを使った検索サービス構築
  4. 4. Azure Search • 強力かつ豊富な検索機能をシンプルなプロトコル とAPIで提供 • 完全マネージドでスケーラブル • 充実した自然言語解析、ランキング調整機能 検索の専門的な知識不要で容易にリッチ検索アプリの構築を可能と し、また完全マネージドで運用管理コストも削減することができる → アプリ/サービス開発に集中できる 全文検索機能を提供するSearch-as-a-Service (PaaS)
  5. 5. 検索エクスペリエンス 地理空間検索 全てAzure Searchの機能で実現しています http://azjobsdemo.azurewebsites.net/
  6. 6. シンプルなAPIとフォーマット インデックス追加・更新 /indexes/<indexname> PUT インデックス一覧表示 /indexes GET インデックス統計情報取 得 /indexes/<indexname>/stats GET インデックスの削除 /indexes/<indexname> DELETE ドキュメント追加・削除 /indexes/<indexname>/docs/index POST 検索 /indexes/<indexname>/docs GET ドキュメントlookup /indexes/<indexname>/docs/<key> GET ドキュメント数取得 /indexes/<indexname>/docs/$count GET サジェスション /indexes/<indexname>/docs/suggest GET テストアナライザ /indexes/<indexname>/analyze POST https://<アカウント名>.search.windows.net { "@odata.context": "https://yoichikademo.search.windows.net/ indexes('messages')/$metadata#Collection( Microsoft.Azure.Search.V2016_09_01.IndexR esult)", "value": [ { "errorMessage": null, "key": "1", "status": true, "statusCode": 201 }, { "errorMessage": null, "key": "2", "status": true, "statusCode": 201 }, { "errorMessage": null, "key": "3", "status": true, "statusCode": 201 } ] } ※ APIバージョン 2016-09-21の機能一覧。バージョンごとの機能についてはこちらを参照ください
  7. 7. Azure Search アーキテクチャ全図 QueryParser Search Engine Analyzer IndexWriter インデックスSimple lucene Analyzed terms Query terms Query tree Query text Documents terms Analyzed terms Retrieve Ingest Analyzer 検索処理 • クエリーを元に トークン引き当て • ランキング処理 クエリ文を解析し内部 クエリ―形式に変換 テキスト解析を行いトークンの 展開、変換、削除などを行う 転置インデックス インデックス生成処理
  8. 8. 2種類のインデックス更新方式 IndexWriter Indexer REST API インデクサーによる定期更新 • インデクサーの定期的実行による更新: 最小5分 • 変更、削除検知し差分実行 • データソースのフルクロール可 インデクシングAPIで直接更新 • POST: /indexes/<name>/docs/index • アップロード 、マージ、削除など • 1度のバッチ: 最大 1,000 ドキュメント • リアルタイムに近いデータ更新
  9. 9. スケーラビリティ - 検索・データ 1 ~ 12 1 ~ 12
  10. 10. オンラインでスケール設定可能 APIやポータルからオンラインでスケール設定変更が可能 パーティション レプリカ
  11. 11. 多様な検索対象データ  データソース  ファイル(BLOB)、DRMBS、NoSQLなど  データの種類 構造化データ 非構造化データ • カタログ検索 • ウェブ検索 • XML/JSONデータ検索 • PDF、オフィスドキュメント • ファイル種類ごとの形式に合わせたライブラリによりテキスト抽出 • テキスト抽出ライブラリ: Apache Tikaなど • Azure Search Blobストレージインデクサー:オフィス、PDF, HTMLからのインデックス作成が可能 • 画像、音声・動画データ • OCR、画像認識(人物・物)、音声認識技術を利用してメタ情報を構 造化データとして抽出 • Cognitive Services、Azure Media Servicesメディア分析:画像、 音声・動画データからのメタデータ抽出可能
  12. 12. メディア x 音声認識 x 機械翻訳 x 全文検索 https://github.com/shigeyf/ai-digitalmedia
  13. 13. Azureサービスを活用した検索サービス事例 国立大学法人岐阜大学 IR情報基盤 https://www.microsoft.com/ja-jp/casestudies/gifu-u.aspx
  14. 14. Azureサービスを活用した検索サービス事例 富士フィルムソフトウェア株式会社様 - 「IMAGE WORKS」 • Azure の PaaS を最大限に活用しサービスの安定性、拡張性、利便性の飛躍的向上 • Cosmos DB (NoSQL) とAzure Search (全文検索) を利用した性能向上 https://www.microsoft.com/ja-jp/casestudies/ffs.fujifilm.aspx
  15. 15. 全文検索 アプリケーション開発
  16. 16. サンプルアプリケーション  Q&Aナレジッジベース全文検索アプリ  サンプルソースコード  https://github.com/yokawasa/azure-search-qna-demo
  17. 17. サービスのプロビジョニング  ポータルでアカウント作成  アカウント名設定  リージョン設定  SKUの選択  Free, Basic, Standard S1,S2,S3 途中でSKUの変更ができ ないのであらかじめ余裕 を持ったKUの選択が必要
  18. 18. インデックスの作成 管理ポータルもしくはAPI経由でインデックスのスキーマ定義を行う スキーマで定義するのは大きく次の3つ • 検索フィールド • 主キー • データ型: String, Collection(string list), Int32/64, Double, DateTime, Boolean, Geography-point • 属性: Retrievable, Filterable, Sortable, Facetable, Searchable • アナライザー(言語アナライザー) • サジェスタ • サジェッション候補用フィールド定義 • スコアリングプロファイル • カスタムのスコア付け動作の定義。ランキングに影響 https://docs.microsoft.com/en-us/rest/api/searchservice/Create-Index
  19. 19. アナライザーの選択 • アナライザーとは? • インデックス生成処理とクエリ処理の両方で実行されるテキスト解析処理 • フィールド単位で個別のアナライザーを設定可能 • 2種類の言語別アナライザー • Luceneアナライザー • Apache Luceneの中核プロジェクトLucene Coreに含まれる言語別アナライザー • 35アナライザーが利用可能(2017年5月時点) • 日本語Luceneアナライザーはja.lucene(”kuromoji”) • Microsoftアナライザー • マイクロソフト独自の自然言語処理技術をベースとした言語別アナライザー • 50アナライザーが利用可能(2017年5月時点) • 日本語Microsoftアナライザーはja.microsoft 日本語の場合ja.luceneかja.microsoftの2択と考えてよい https://docs.microsoft.com/en- us/rest/api/searchservice/language-support
  20. 20. スキーマ変更に関する注意点 スキーマの更新は限定的にサポート 〇 ✖ • 新しいフィールドの追加 • 新しいフィールドが追加されると既存ドキュメントの追 加フィールドの値はNULL扱い • 既存フィールドの種類変更、削除
  21. 21. インデックス作成 – 管理ポータル1 基本設定 フィールド属性 アナライザー 設定 サジェスタ設定
  22. 22. インデックス作成 – 管理ポータル2 基本設定 フィールド属性 アナライザー サジェスタ設定 スコアリング プロファイル設定 CORS設定
  23. 23. インデックス作成 – REST API POST /indexes?api-version=2016-09-01 Host: qnademo.search.windows.net api-key: 91FAB1CDBD75CF1D39491043BF3491AC Content-Type: application/json { "name": "qna", "fields": [ { "name":"id", "type":"Edm.String", "key":true, "retrievable":true, "searchable":false, "filterable":false, "sortable":false, "facetable":false }, { "name":"question", "type":"Edm.String", "retrievable":true, "searchable":true, "filterable":false, "sortable":false, "facetable":false,"analyzer":"ja.lucene"}, { "name":"answer", "type":"Edm.String", "retrievable":true, "searchable":true, "filterable":false, "sortable":false, "facetable":false,"analyzer":"ja.lucene"}, { "name":"category", "type":"Edm.String", "retrievable":true, "searchable":false, "filterable":true, "sortable":true, "facetable":true } ], "suggesters": [ { "name":"questionsg", "searchMode":"analyzingInfixMatching", "sourceFields":["question"] } ], "scoringProfiles": [ { "name": "weightedFields", "text": { "weights": { "question": 9, "answer": 1 } } } ], "corsOptions": { "allowedOrigins": ["*"], "maxAgeInSeconds": 300 } } 基本設定 フィールド属性 アナライザー サジェスタ設定 CORS設定 スコアリング プロファイル設定
  24. 24. インデックス更新 – 直接PUSH APIにドキュメントを直接POSTしてリアルタイム に近いデータ 更新が可能 更新内容反映までの時間はその時のシステムの負荷状況により異なります POST /indexes/qna/docs/index?api-version=2016-09-01 Host: qnademo.search.windows.net api-key: 91FAB1CDBD75CF1D39491043BF3491AC Content-Type: application/json { "value": [ { "@search.action": "upload", "id": "37e308d0-c62f-45b5-b953-363c3b77c1ea”, "question": "Azure Cosmos DB とは何ですか?”, "answer": "Azure Cosmos DB は、グローバルにレプリケートされたマルチモデル…", "category": "CosmosDB" }, { "@search.action": "upload", "id": "94e26eff-3048-4275-a8d0-4b4856dc6b3c", "question": "提供されているアルゴリズムは、R または Python で記述されていますか”, "answer": "いいえ。これらのアルゴリズムは、多くの場合、より優れたパフォーマンスを… ", "category": "MachineLearning" }, … ] } 一度に最大1000ドキュメントまで、 もしくはBODYサイズ最大16MB までPOSTすることが可能。
  25. 25. インデックス更新 – インデクサー利用 • インデクサーの設定により、特定のデータ ソースから定期的に更新データをポーリング してインデックスの更新をすることが可能 • 設定方法 • 管理ポータル経由で設定: 比較的簡単に設定可能、 ただし一部機能は制御不可 • REST API経由で設定: コードにより細かな制御 が可能 • インデクサー設定の流れ 1. Azure Searchにデータソースを登録 2. Azure Searchに更新先インデックスを作成 3. Azure Searchにインデクサーを設定 IndexWriter Indexer
  26. 26. インデクサーによる更新設定 - 管理ポータル ①データソース登録 ②ターゲット インデックス設定 ③インデクサー登録 Cosmos DBをデータソースとしたインデクサー設定例(更新対象インデックスqna)
  27. 27. インデクサーによる更新設定 – REST API Cosmos DBをデータソースとしたインデクサー設定例(更新対象インデックスqna) POST /datasources?api-version=2016-09-01 Host: qnademo.search.windows.net api-key: 91FAB1CDBD75CF1D39491043BF3491AC Content-Type: application/json { "name": ”qnadb", "type": "documentdb", "credentials": { "connectionString": "AccountEndpoint=https://yoichikademo.documents.azure.com;Accou ntKey=Tl1+ikQtnExUisJ+BXwbbaC8NtUqYVE9kUDXCNust5aYBduhui29Xtxz3 DLP88PayjtgtnARc1PW+2wlA6jXJw==;Database=qna" }, "container": { "name": ”qna", "query": "SELECT s.id, s.question, s.answer, s.category, s._ts FROM Sessions s WHERE s._ts > @HighWaterMark" }, "dataChangeDetectionPolicy": { "@odata.type":"#Microsoft.Azure.Search.HighWaterMarkChangeDetec tionPolicy", "highWaterMarkColumnName": "_ts" } } POST /indexers?api-version=2016-09-01 Host: qnademo.search.windows.net api-key: 91FAB1CDBD75CF1D39491043BF3491AC Content-Type: application/json { "name": ”qnaindexer", "dataSourceName": ”qnadb", "targetIndexName" : ”qna", "schedule": { "interval" : "PT5M", "startTime" :"2017-09-25T00:00:00Z" } } qnadb qnaindexerデータソース登録対象の DocumentDBの接続文字列 DocumntDBからの更新対象 データ取得用クエリ インデクサ名 データソース名 更新対象インデックス名 qna DocumentDB コレクション名 データソース名
  28. 28. 検索クエリによるドキュメント取得 エンドポイント (METHOD:GET) https://<アカウント名>.search.windows.net/indexes/<インデックス名>/docs &search=keyword &searchMode=all &queryType=full ?api-version =2016-09-01 &$count=true &$top=5 &$skip=10 &$select=title,content &$orderby=updatetime desc &facet=category &highlight=title 共通 結果表示用 全文検索関連パラメータ search • 全文検索用キーワード指定 • アナライザ処理、ランキング処理適用 searchMode Booleanクエリ評価方法指定 (all |any) queryType クエリパーサーを選択:Simple or Lucene (simple|full) &$filter= category eq x searchや$filter、その他クエリ文やパラメータに関する参考セッション de:code2017: その情報うまく取り出せていますか? 〜 意外と簡単、Azure Search で短時間で 検索精度と利便性を向上させるための方法 https://channel9.msdn.com/Events/de-code/2017/DI08 絞り込み用
  29. 29. Q&Aアプリ - 検索クエリ解説 エンドポイント (METHOD:GET) /indexes/<インデックス名>/docs api-version=2016-09-01 $top=50 $select=id,question,answer,category highlight=question,answer facet=category,count:10 searchMode=any queryType=full search=Azure~1 $filter=category%20eq%20%27AzureSearch%27' APIバージョン指定 上位50件取得 検索で取得するフィールド指定 検索ヒットした語句をハイライトするフィールド指定 ファセット用フィールド指定、上位10ファセット取得 Booleanクエリ評価方法指定: any=X OR Yで広く取得 クエリパーサーを選択: full = Luceneクエリパーサー 全文検索キーワード、「~1」=Luceneクエリのあいまい 検索で1文字入れ替えてマッチするもの全てヒット フィルター指定: 「category eq AzureSearch」 をURLエンコード Simple Query syntax Lucene Query syntax
  30. 30. サジェッション 入力したキーワード文字列に関連の深い語句を逐次予測して表示するための機能 事前に検索対象フィールドをサジェスタ(suggesters)登録する必要があります "suggesters": [ { "name":"questionsg", "searchMode":"analyzingInfixMatching", "sourceFields":["question"] } ], /indexes/qna/docs/suggest suggesterName search Azu 文の先頭または中間にある フレーズのマッチング (2017-09時点でこのモードのみ) { "@odata.context": "https://qnademo.search.windows.net/indexes(‘qna ')/$metadata#docs(id)", "value": { "@search.text": "Azure AD、Office 365、Azure の関係はどうなっていますか?", ”id": "3290cbb7-2f62-4948-b984-1bced9a6cb5f"}, {"@search.text": "Azure Cosmos DB の MongoDB 用 API とは何ですか?", ”id": "af19017e-1c72-4b34-b121-9b7efa91cc4a"}, … ]} https://docs.microsoft.com/en-us/rest/api/searchservice/suggesters
  31. 31. Q&Aアプリ - サジェスションクエリ解説 エンドポイント (METHOD:GET) /indexes/<インデックス名>/docs/suggest api-version=2016-09-01 $top=10 select=question suggesterName=questionsg fuzzy=true search=Azure APIバージョン指定 上位50件取得 検索で取得するフィールド指定 サジェスタの指定 Fuzzy(あいまい)検索有効化 全文検索キーワード指定 もちろんフィルタと合わせての指定も可能 &search=Azure &$filter=category%20eq%20%27AzureSearch%27'
  32. 32. オートコンプリートUX - typeahead.js https://github.com/twitter/typeahead.js • オートコンプリートのユーザーエクスペリエンス を簡単に実装できる • 大きくBloodhoundとTypeaheadの2種類 • Bloodhound: suggestionエンジン • Typeahead: UIライブラリ • 本サンプル(左)ではBloodhoundのみ使用 サジェスチョン 出力結果表示用form Bloodhoundを使った サジェスションデータ 取得ロジック typeahead.jsの インクルード
  33. 33. ファセット・ナビゲーション ドリルダウンナビゲーションを提供するフィルター処理の一種 スキーマでfacetable:true、filterable:trueで登録されているフィールドを使用 して、クエリ時に作成します { "name":”cateogry", "type":"Edm.String", "searchable": false, "filterable":true, "sortable":true, "facetable":true }, インデックス定義でフィールドのファセット有効化 ファセットリクエスト /indexes/qna/docs facet search "@search.facets": { "color@odata.type": "#Collection(Microsoft.Azure.Search.V2016_09_01.Q ueryResultFacet)", ”category": [ { "count": 65, "value": ”CosmosDB “ }, { "count": 35, "value": ”MachineLearning“ }, { "count": 21, "value": ”AzureAD“ }, { "count": 17, "value": ”AppInsights “ }, { "count": 12, "value": “LogAnalytics“ } … ], ここでは1ファセットのみ。 複数のファセットを指定す ることも可能
  34. 34. 検索精度のチューニングについて 検索精度チューニングのための主要設定箇所は以下4点 ポイント 役割 設定箇所 アナライザー テキストのトークン化 インデックススキーマ クエリ トークンの絞り込み、マッチング の挙動と結果評価の制御 クエリパラメータ ランキング 関連度(スコア)の計算 スコアリングプロファイル クエリパラメータ 同義語辞書 辞書ベースのキーワードの展開 (クエリ側でのみ) 同義語辞書 インデックススキーマ 検索精度チューニングに関する参考セッション de:code2017: その情報うまく取り出せていますか? 〜 意外と簡単、Azure Search で短時間で 検索精度と利便性を向上させるための方法 https://channel9.msdn.com/Events/de-code/2017/DI08
  35. 35. Azure Search UIライブラリ- AzureSearch.js https://github.com/Yahnoosh/AzSearch.js • Azure Searchプロダクトチーム主要開発者によ り開始されたOSSライブラリ(TypeScript) • ライブラリが提供するオブジェクト操作により非 常に短いコードでサーチ用UIを組み立てることが 可能(サーチボックス、結果出力、ページネー ション、ファセット、サジェスション、 etc) • テンプレートジェネレータ • http://azsearchstore.azurewebsites.net/ azsearchgenerator/index.html • デモサイト • https://azsearchstore.azurewebsites.net /realestate.html
  36. 36. モニタリング・分析
  37. 37. 検索ログ・メトリックスの有効活用 • 検索オペレーションログやメトリックスの自動収集をポータルで有効化 • 収集データはAzure Storageに保存 ポータルで機能有効化と保存先ストレージの選択 オペレーションログ メトリックス 保存 コンテナ insights-logs- operationlogs insights-metrics- pt1m 内容 • インデックス作成 • インデクシング • 検索クエリ • サジェストクエリ • など • レイテンシー • クエリ数/秒 (QPS) ※分単位 ストレージにログ保存 オペレーションログ・メトリック有効化
  38. 38. 検索ログサンプル { "time": "2016-05-07T09:15:24.3901416Z", "resourceId": "/SUBSCRIPTIONS/87C7C7F9-0C9F- 47D1-A856-1305A0CBFD7A/RESOURCEGROUPS/RG-SEARCH- DEMO/PROVIDERS/MICROSOFT.SEARCH/SEARCHSERVICES/YO ICHIKADEMO0", "operationName": "Query.Search", "operationVersion": "2015-02-28", "category": "OperationLogs", "resultType": "Success", "resultSignature": 200, "durationMS": 41, "properties": { "Description" : "GET /indexes('decodesessions2016')/docs" , "Query" : "?$top=12&$select=id,title,url,thumbnail,descript ion&api-version=2015-02-28&search=Azure" , "Documents" : 12, "IndexName" : "decodesessions2016" } } オペレーションログ例:クエリログ { "resourceId": "/SUBSCRIPTIONS/87C7C7F9- 0C9F-47D1-A856-1305A0CBFD7A/RESOURCEGROUPS/RG- SEARCH- DEMO/PROVIDERS/MICROSOFT.SEARCH/SEARCHSERVICES /YOICHIKADEMO0", "metricName": "SearchQueriesPerSecond", "time": "2016-05-13T13:14:00Z", "average": 0.05, "minimum": 0, "maximum": 2, "total": 3, "count": 60, "timeGrain": "PT1M" } メトリックログ例:QPS
  39. 39. ログ分析: Power BIによる可視化 • ストレージにアーカイブされたログはPower BI連携により簡単に可視化が可能 • 連携はAzure Search用Power BIコンテンツパックを利用 https://powerbi.microsoft.com/ja-jp/documentation/powerbi-content-pack-azure-
  40. 40. 検索トラフィック分析 - App Insights連携 • Application Insightsと連携することでより具体的なトラフィックの分析を実 装することが可能です。ユーザーとその行動に関する洞察を明らかにするこ とができます。 • 必要な設定: 1. 検索トラフィック分析用のApplication Insightsリソースを作成 2. ユーザーの検索リクエストデータと検索結果に対するクリックデータをAppInsightsにロギングするため にクライアントサイドにコードを埋め込む 3. Power BI Desktopでレポーティング詳細を確認(BIテンプレートが利用可能) • Power BI Desktopテンプレートで得られる情報 • クリック率 (CTR): 検索総数に対する特定のドキュメントをクリックしたユーザー数の割合。 • クリックされていない検索語句: クリックが登録されていない上位クエリの語句 • 最もクリックされた人気ドキュメント語句 • 人気のある語句とドキュメントの組み合わせ • クリック時間 https://docs.microsoft.com/en-us/azure/search/search-traffic-analytics
  41. 41. APPENDIX
  42. 42. Free Basic Standard S1 Standard S2 Maxサービス数 1 12 12 6 Maxインデック ス数/サービス 3 5 50 200 Maxドキュメン ト数/サービス 1000 0 100万 1500万/P (1.8億/サービス) 6000万/P (7.2億/サービス) Maxストレージ サイズ/サービス 50MB 2GB 25GB/P (300GB/サービ ス ) 100GB/P (1.2TB/サービス) Maxパーティ ション数/サービ ス N/A 1 12 12 Maxレプリカ数/ サービス N/A 3 12 12 Maxサーチユ ニット数/サービ ス N/A 3 36 36 クエリ数/秒 (QPS) 目安 N/A 〜3/R 〜15/R 〜60/R Standard S3 Standard S3 HD 6 6 200 1000/P (3000/サービス) 1.2億/P (14億/サービス) 2000万/P (100万/インデックス) 200GB/P (2.4TB/サービス) 200GB/P (600G/サービス) 12 3 12 12 36 36 >60/R >60/R お試しから大規模まで充実したSKU https://azure.microsoft.com/ja-jp/pricing/details/search/
  43. 43. Cognitive Services: 人工知能サービスAPI群 画像認識、音声認識、テキスト認識など、ディープ ラーニング手法による大きなコンピューティング パワーを必要とする処理などを Azure の API Service として提供。 https://www.microsoft.com/cognitive-services/
  44. 44. AI x Search - 非構造化データ検索実装例 Liberty Of Corom • プロジェクト概要 • スマホ、メール、スキャナを問いしてアップロードされたドキュメントや画像をデータ解析パイプライ ンにかけて検索可能にするための一連のパイプラインを提供する。データ解析にMicrosoft Cognitive Servicesを、全文検索エンジンにAzure Searchを利用 • プロジェクトサイト • ソースコード: https://github.com/Corom/LibraryOfCorom • 紹介ビデオ: https://channel9.msdn.com/Events/Build/2017/B8081#time=5m30s
  45. 45. • プロジェクト概要 • メディア x 音声認識 x 機械翻訳 x 全文検索 • ウェブフロント(コンテナ)、データ生成ワークフロー 全てサーバレスで実現 • ワークフロー • ストレージコンテナにアップロードされた動画ファイル をAzure Media Analyticsパイプラインを通じて映像 キャプション取得 • Microsoft Translatorにより多言語サブタイトル取得 • キャプション、サブタイトルは全文検索のためAzure Searchでインデックス化 • 上記一連のワークフローはLogic App、Functionsにより 完全自動化 • プロジェクトサイト • https://github.com/shigeyf/ai-digitalmedia AI x Search - 非構造化データ検索実装例 AI Digital Media
  46. 46. ウェブクローリングシナリオ実装例 PythonスクレイピングフレームワークであるScrapyを利用したウェブクローリングシナリオ実装例 1. Scrapyにより特定サイト内コンテンツを スクレイピング 2. スクレイピングで取得されたデータを CosmosDB(データソース)に格納 3. Azure Searchのインデクサーが定期的 にCosmosDB更新内容を元にインデック スを更新 https://github.com/yokawasa/scrapy-azuresearch-crawler-samples

×