SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
elasticsearchプラグイン入門
Solr APIプラグインでSolrを入れ替えてみよう
 名前: 菅谷信介
 所属: N2SM, Inc.
 オープンソース活動:
– Apache Portals、codehaus、Seasarプロジェクトなど
– Fessプロジェクト運営
などなど・・・
 Twitter: @shinsuke_sugaya
 ブログ: http://www.chazine.com/
自己紹介
2
 elasticsearch plugin入門
 elasticsearch-solr-apiとは
 elasticsearch-solr-apiのデモ
アジェンダ
3
Plugin入門
4
 elasticsearchの機能をカスマイズする方法
 プラグインのzipはjarをまとめたもの
 pluginコマンドでインストールする
●
plugin -install ...
 unzipコマンドでpluginsディレクトリに展開でも良
い(と思う)
 プラグインを作ればいろいろとできる
●
基本的なところは簡単に作れる
●
いろいろとやるには情報が足りない…
●
すごいことしたいならコード読むしかない
eleasticsearch pluginとは
5
 Analysis: Analyzer関連の変換系
 River: データを取り込む系
 Transport: 他とやりとりする系
 Site: 統計情報などサイト表示系(作り方はちょっと例外的)
 Script: Pythonとか多言語実行系
 その他: いろいろ…
プラグインの種類
6
 es-plugin.propertiesを作成する
 Pluginクラスを作成する
 Moduleクラスを作成する
 必要なコンポーネントを作る
 assembly用のxmlファイルを作る
(maven-assembly-pluginでzip化する)
・・・以上
プラグインの作り方
7
ディレクトリ構成図例
8
├── pom.xml
└── src
   └── main
   ├── assemblies
   │   └── plugin.xml
   ├── java
   │   └── <package name>
   │   ├── plugin
   │   │   ├── ...Module.java
   │   │   └── ...Plugin.java
   │   └── rest
   │  └── ...RestAction.java
   └── resources
   └── es-plugin.properties ①
②
 Pluginクラスを指定するファイル
plugin=<package name>.〜Plugin
es-plugin.properties
9
 モジュールやサービスの登録や設定など行う
Pluginクラス
10
public class SolrPlugin extends AbstractPlugin {
@Override
public String name() {
return "SolrPlugin";
}
@Override
public String description() {
return "This plugin provides Solr interface on the elasticsearch.";
}
@Override
public void processModule(final Module module) {
if (module instanceof RestModule) {
((RestModule) module).addRestAction(SolrUpdateRestAction.class);
((RestModule) module).addRestAction(SolrSearchRestAction.class);
}
}
@Override
public Collection<Class<? extends Module>> indexModules() {
final Collection<Class<? extends Module>> modules = new ArrayList<Class<? extends Module>>();
modules.add(SolrIndexModule.class);
return modules;
}
}
AbstractPluginを継承するAbstractPluginを継承する
Pluginクラスの例
11
@Override
public void processModule(final Module module) {
if (module instanceof RestModule) {
((RestModule) module)
.addRestAction(SolrUpdateRestAction.class);
((RestModule) module)
.addRestAction(SolrSearchRestAction.class);
}
}
@Override
public Collection<Class<? extends Module>> indexModules() {
Collection<Class<? extends Module>> modules
= new ArrayList<Class<? extends Module>>();
modules.add(SolrIndexModule.class);
return modules;
}
HTTP等でリクエストを
処理したい場合
RestActionを登録
HTTP等でリクエストを
処理したい場合
RestActionを登録
サービス等のモジュールを作り
コンポーネントを登録する
サービス等のモジュールを作り
コンポーネントを登録する
 コンポーネント登録を行う
Moduleクラス
12
public class SolrIndexModule extends AbstractModule {
@Override
protected void configure() {
this.bind(RegisterSolrDateType.class)
.asEagerSingleton();
}
}
 @Injectを付けたコンストラクタで他コンポーネン
トを取得可能
各種コンポーネント
13
public class RegisterSolrDateType extends
AbstractIndexComponent {
@Inject
public RegisterSolrDateType(final Index index,
@IndexSettings final Settings indexSettings,
final MapperService mapperService) {
super(index, indexSettings);
…略…
}
}
 Mavenでzip成果物を生成するための設定ファイル
assemblyのXMLファイル
14
<?xml version="1.0"?>
<assembly>
<id></id>
<formats><format>zip</format></formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>true</useProjectArtifact>
<includes>
<include>org.codelibs:elasticsearch-solr-api</include>
<include>org.apache.solr:solr-core</include>
... 略 ...
</includes>
</dependencySet>
</dependencySets>
</assembly> 含めるjarファイルを記述する含めるjarファイルを記述する
 maven-shade-pluginによりパッケージ名が変えら
れている
 例: org.joda→org.elasticsearch.common.joda
 RestRequestから複数の値を持つリクエストパラ
メータが取得できない
 …/hoge?a=1&a=2&a=3 → a=[1,2,3]ではとれない
 pom.xmlに記述した依存関係で成果物ができないの
で、zipにjarを入れ忘れたり…
 非同期なので、デバッグを注意する
作る上でのポイント
15
Solr APIプラグイン
&
Fessとのデモ
16
 Solrのインターフェースでelasticsearchを利用でき
るプラグイン
 mocksolrpluginからフォーク
 SolrのXMLとJavaBin形式に対応
 SolrJとか使って、検索と更新ができる
 ファセットやハイライトも可能
 Solrのファンクションクエリーは非対応
Solr APIプラグインとは
17
 elasticsearchのインストール
tar zxvf elasticsearch-0.90.3.tar.gz
 プラグインのインストール
./bin/plugin -install elasticsearch-solr-api -url
http://maven.codelibs.org/org/codelibs/elasticsearch-
solr-api/1.2.1/elasticsearch-solr-api-1.2.1.zip
 elasticsearchの実行
./bin/elasticsearch
 以下のURLでSolrのようにアクセスできる:
http://hostname:9200/[index]/[type]/_solr
導入手順
18
 簡単に導入できるOSS全文検索システム
 Apache Solrを検索エンジンとして利用
 Apacheライセンスで提供
 Webサイトやファイルシステムのクロール
 データベースもクロール可能
 ブラウザによる管理画面
 MS Office、PDF、圧縮ファイルもサポート
 ログイン状態で検索結果の出し分け可能
 登録したカテゴリごとに検索可能
 ・・・などなど機能多数
Fessとは
19
 solrlib.diconでSolrのURLを変更する
http://localhost:8080/solr/core1/
↓
http://localhost:9200/solr/core1/_solr
 elasticserchにmappingを作成する
・・・以上
Fessでの導入手順
20
 curl -XPUT
'http://127.0.0.1:9200/solr/core1/_mapping' -d '…'
Fessで利用するmappingを作成
21
"properties" : {
"id" : {"type" : "string", "store" : "yes", "index" : "not_analyzed"},
"parentId" : {"type" : "string", "store" : "yes", "index" : "not_analyzed"},
"segment" : {"type" : "string", "store" : "yes", "index" : "not_analyzed"},
"digest" : {"type" : "string", "store" : "yes"},
"boost" : {"type" : "float", "store" : "yes", "null_value" : 1.0},
"host" : {"type" : "string", "store" : "yes"},
"site" : {"type" : "string", "store" : "yes"},
"url" : {"type" : "string", "store" : "yes", "index" : "not_analyzed"},
"content" : {"type" : "string", "store" : "yes"},
"title" : {"type" : "string", "store" : "yes"},
"cache" : {"type" : "string", "store" : "yes", "index" : "not_analyzed"},
"tstamp" : {"type" : "solr_date", "store" : "yes"},
"anchor" : {"type" : "string", "store" : "yes", "index" : "not_analyzed"},
"contentLength" : {"type" : "long", "store" : "yes"},
"lastModified" : {"type" : "solr_date", "store" : "yes"},
"lang" : {"type" : "string", "store" : "yes"},
"mimetype" : {"type" : "string", "store" : "yes", "index" : "not_analyzed"},
"type" : {"type" : "string", "store" : "yes", "index" : "not_analyzed"},
"label" : {"type" : "string", "store" : "yes", "index" : "not_analyzed"},
"role" : {"type" : "string", "store" : "yes", "index" : "not_analyzed"}
}
 Fessでelasticsearch-solr-api経由でelasticsearch
を利用してみる
 Fess管理URL:
http://127.0.0.1:8080/fess/admin
 Fess検索URL:
http://127.0.0.1:8080/fess/search?query=fess
 elasticsearch検索URL:
http://127.0.0.1:9200/solr/core1/_search?
q=fess&pretty=true
※ 差分クロールはファンクションクエリーを利用し
ているので利用できない
デモ
22
Q&A
23

Contenu connexe

Tendances

ニコニコニュースと全文検索
ニコニコニュースと全文検索ニコニコニュースと全文検索
ニコニコニュースと全文検索
techtalkdwango
 
Mroongaを選んだ理由と
ちょっと嬉しかった話
Mroongaを選んだ理由と
ちょっと嬉しかった話Mroongaを選んだ理由と
ちょっと嬉しかった話
Mroongaを選んだ理由と
ちょっと嬉しかった話
Terui Masashi
 

Tendances (20)

Elasticsearch Authプラグインでアクセスコントロール
Elasticsearch AuthプラグインでアクセスコントロールElasticsearch Authプラグインでアクセスコントロール
Elasticsearch Authプラグインでアクセスコントロール
 
ElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステムElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステム
 
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
 
Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方
 
DBFlute Mavenプラグインを用いてCRUD作成
DBFlute Mavenプラグインを用いてCRUD作成DBFlute Mavenプラグインを用いてCRUD作成
DBFlute Mavenプラグインを用いてCRUD作成
 
Apache Solr 入門
Apache Solr 入門Apache Solr 入門
Apache Solr 入門
 
Elasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバElasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバ
 
はじめての検索エンジン&Solr 第13回Solr勉強会
はじめての検索エンジン&Solr 第13回Solr勉強会はじめての検索エンジン&Solr 第13回Solr勉強会
はじめての検索エンジン&Solr 第13回Solr勉強会
 
Elasticsearch at CrowdWorks
Elasticsearch at CrowdWorksElasticsearch at CrowdWorks
Elasticsearch at CrowdWorks
 
Sc2009autumn s2robot
Sc2009autumn s2robotSc2009autumn s2robot
Sc2009autumn s2robot
 
Solr6 の紹介(第18回 Solr勉強会 資料) (2016年6月10日)
Solr6 の紹介(第18回 Solr勉強会 資料) (2016年6月10日)Solr6 の紹介(第18回 Solr勉強会 資料) (2016年6月10日)
Solr6 の紹介(第18回 Solr勉強会 資料) (2016年6月10日)
 
Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道Fess/Elasticsearchを使った業務で使える?全文検索への道
Fess/Elasticsearchを使った業務で使える?全文検索への道
 
いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!
 
solr勉強会資料
solr勉強会資料solr勉強会資料
solr勉強会資料
 
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
 
ニコニコニュースと全文検索
ニコニコニュースと全文検索ニコニコニュースと全文検索
ニコニコニュースと全文検索
 
社内ドキュメント検索システム構築のノウハウ
社内ドキュメント検索システム構築のノウハウ社内ドキュメント検索システム構築のノウハウ
社内ドキュメント検索システム構築のノウハウ
 
Mroongaを選んだ理由と
ちょっと嬉しかった話
Mroongaを選んだ理由と
ちょっと嬉しかった話Mroongaを選んだ理由と
ちょっと嬉しかった話
Mroongaを選んだ理由と
ちょっと嬉しかった話
 
hs_spider_hs_something_20110906
hs_spider_hs_something_20110906hs_spider_hs_something_20110906
hs_spider_hs_something_20110906
 
MySQLユーザ視点での小さく始めるElasticsearch
MySQLユーザ視点での小さく始めるElasticsearchMySQLユーザ視点での小さく始めるElasticsearch
MySQLユーザ視点での小さく始めるElasticsearch
 

En vedette

検索のダウンタイム0でバックアップからindexをリストアする方法
検索のダウンタイム0でバックアップからindexをリストアする方法検索のダウンタイム0でバックアップからindexをリストアする方法
検索のダウンタイム0でバックアップからindexをリストアする方法
kbigwheel
 

En vedette (7)

はてなブックマークに基づく関連記事レコメンドエンジンの開発
はてなブックマークに基づく関連記事レコメンドエンジンの開発はてなブックマークに基づく関連記事レコメンドエンジンの開発
はてなブックマークに基づく関連記事レコメンドエンジンの開発
 
ElasticSearchでいろいろやってる話
ElasticSearchでいろいろやってる話ElasticSearchでいろいろやってる話
ElasticSearchでいろいろやってる話
 
はてなブックマークのトピックページの裏側 in YAPC::Asia Tokyo 2015
はてなブックマークのトピックページの裏側 in YAPC::Asia Tokyo 2015はてなブックマークのトピックページの裏側 in YAPC::Asia Tokyo 2015
はてなブックマークのトピックページの裏側 in YAPC::Asia Tokyo 2015
 
Elasticsearchを用いたはてなブックマークのトピック生成
Elasticsearchを用いたはてなブックマークのトピック生成Elasticsearchを用いたはてなブックマークのトピック生成
Elasticsearchを用いたはてなブックマークのトピック生成
 
検索のダウンタイム0でバックアップからindexをリストアする方法
検索のダウンタイム0でバックアップからindexをリストアする方法検索のダウンタイム0でバックアップからindexをリストアする方法
検索のダウンタイム0でバックアップからindexをリストアする方法
 
Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題
Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題
Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題
 
ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回
 

Similaire à elasticsearchプラグイン入門

クラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれクラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれ
Masataka MIZUNO
 
PHPカンファレンス関西2012 Silex
PHPカンファレンス関西2012 SilexPHPカンファレンス関西2012 Silex
PHPカンファレンス関西2012 Silex
Masao Maeda
 
The Amazing Toolman - Mastering the tools and propose a hackable "Swiss Army ...
The Amazing Toolman - Mastering the tools and propose a hackable "Swiss Army ...The Amazing Toolman - Mastering the tools and propose a hackable "Swiss Army ...
The Amazing Toolman - Mastering the tools and propose a hackable "Swiss Army ...
SYUE-SIANG SU
 
Mixiアプリで体験する Open Social
Mixiアプリで体験する Open SocialMixiアプリで体験する Open Social
Mixiアプリで体験する Open Social
ngi group.
 
Adobe scoutの紹介
Adobe scoutの紹介Adobe scoutの紹介
Adobe scoutの紹介
AimingStudy
 

Similaire à elasticsearchプラグイン入門 (20)

OpenWhisk - Docker action で MeCab を動かす
OpenWhisk - Docker action で MeCab を動かすOpenWhisk - Docker action で MeCab を動かす
OpenWhisk - Docker action で MeCab を動かす
 
AlfrescoとSolr(中編)
AlfrescoとSolr(中編)AlfrescoとSolr(中編)
AlfrescoとSolr(中編)
 
クラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれクラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれ
 
AWS SDK for Go in #jawsmeguro
AWS SDK for Go in #jawsmeguroAWS SDK for Go in #jawsmeguro
AWS SDK for Go in #jawsmeguro
 
AWS SDK for Go in #jawsmeguro
AWS SDK for Go in #jawsmeguroAWS SDK for Go in #jawsmeguro
AWS SDK for Go in #jawsmeguro
 
Building modernapplicationwithelasiccloud
Building modernapplicationwithelasiccloudBuilding modernapplicationwithelasiccloud
Building modernapplicationwithelasiccloud
 
APIMeetup 20170329_ichimura
APIMeetup 20170329_ichimuraAPIMeetup 20170329_ichimura
APIMeetup 20170329_ichimura
 
Open Shift v3 主要機能と内部構造のご紹介
Open Shift v3 主要機能と内部構造のご紹介Open Shift v3 主要機能と内部構造のご紹介
Open Shift v3 主要機能と内部構造のご紹介
 
PHPカンファレンス関西2012 Silex
PHPカンファレンス関西2012 SilexPHPカンファレンス関西2012 Silex
PHPカンファレンス関西2012 Silex
 
AWSを含めたハイブリッド環境の監視の実現 ~zabbixのクラウド対応モジュールHyClops~
AWSを含めたハイブリッド環境の監視の実現 ~zabbixのクラウド対応モジュールHyClops~AWSを含めたハイブリッド環境の監視の実現 ~zabbixのクラウド対応モジュールHyClops~
AWSを含めたハイブリッド環境の監視の実現 ~zabbixのクラウド対応モジュールHyClops~
 
The Amazing Toolman - Mastering the tools and propose a hackable "Swiss Army ...
The Amazing Toolman - Mastering the tools and propose a hackable "Swiss Army ...The Amazing Toolman - Mastering the tools and propose a hackable "Swiss Army ...
The Amazing Toolman - Mastering the tools and propose a hackable "Swiss Army ...
 
WordPress APIで作るモバイルアプリ
WordPress APIで作るモバイルアプリWordPress APIで作るモバイルアプリ
WordPress APIで作るモバイルアプリ
 
AWS Lambda + Python資料 ver0.94 20160825
AWS Lambda + Python資料 ver0.94 20160825AWS Lambda + Python資料 ver0.94 20160825
AWS Lambda + Python資料 ver0.94 20160825
 
Mixiアプリで体験する Open Social
Mixiアプリで体験する Open SocialMixiアプリで体験する Open Social
Mixiアプリで体験する Open Social
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
 
Getting Started Algolia with InstantSearch.js
Getting Started Algolia with InstantSearch.jsGetting Started Algolia with InstantSearch.js
Getting Started Algolia with InstantSearch.js
 
Adobe scoutの紹介
Adobe scoutの紹介Adobe scoutの紹介
Adobe scoutの紹介
 
ログブラウズ、解析サービスSumologicの紹介
ログブラウズ、解析サービスSumologicの紹介ログブラウズ、解析サービスSumologicの紹介
ログブラウズ、解析サービスSumologicの紹介
 
WordPressAPI
WordPressAPIWordPressAPI
WordPressAPI
 
SwaggerとAPIのデザイン
SwaggerとAPIのデザインSwaggerとAPIのデザイン
SwaggerとAPIのデザイン
 

Dernier

Dernier (11)

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

elasticsearchプラグイン入門