SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
全文検索エンジン(Tantivy/Bayard)
を試してみた!!
虎の穴ラボ 古賀広隆
1
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
2
目次
1. 自己紹介
2. 全文検索エンジンについて
3. Tantivy(タエンティビィ)について
4. Tantivy-CLIを試してみた(Mac)
5. Bayard(バイヤール)の特徴について
6. Bayard-RESTを試してみた(Docker)
7. Bayardの使い方・まとめ
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
3
1. 自己紹介
出身地は佐賀です。三重県から地方勤務で虎の穴ラボの通販のチーム
にいます。
(2020年12月入社、二児の父です。)
全般的にフロントエンドは得意、バックエンドの知識は古めです。
推し
・南條愛乃(FripSideのVocal)
・Node.js/Java
・Nuxt.js
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
みなさま、全文検索エンジンを使っ
ていますか?
4
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
2. 全文検索エンジンについて
クラウドだと「Amazon Elasticsearch Service」や「Azure
Cognitive Search」など、さまざまな選択肢があると思います。
今回は、虎の穴ラボの社内のWebツールに導入できそうな、
簡易的な全文検索エンジンにどのようなものがあるか調べた際に見つけ
た「Tantivy/Bayard」という2つのRust製の全文検索エンジンを試し
てみました。
5
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
3. Tantivyについて
Rustで記述された、全文検索エンジンライブラリです。
高速で軽量(起動時間が短い)のが特徴です。
日本語(中国語、韓国語も)に対応(設定が必要)していて、
Apache Lucene(Elastic Search等)と似た設計になっている
欠点:分散検索できない
(複数のDBに異なるデータを置いて、必要なDBを選択して検索的なこと)
https://github.com/tantivy-search/tantivy
6
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
3. Tantivyについて
ベンチマーク
https://tantivy-search.github.io/bench/
(Luceneの約半分ぐらいの速度で検索できる)
(一部、Luceneより遅い条件もあります)
7
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
Rust!使ったことない・・😱
8
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
4. Tantivy-CLIが提供されてた😆
これだと、Rust使えなくても試せそうなので、早速、試してみる。
(最初にMacにRustをインストールします)
9
$ brew install rust
$ cargo install tantivy-cli
$ echo "export PATH="$HOME/.cargo/bin:$PATH"" >> ~/.zshrc
$ source ~/.zshrc
$ mkdir wikipedia-index
$ tantivy new -i wikipedia-index
# ドキュメントのプロパティ(title, body, url)の設定を対話式で作る(後ほど、スピーカーノート参照)
$ curl -OL http://fulmicoton.com/tantivy-files/wiki-articles-1000.json
$ cat wiki-articles-1000.json | tantivy index -i ./wikipedia-index # 11MB、一瞬で解析が終わる
$ tantivy serve -i wikipedia-index # サーバの起動
listening on http://localhost:3000
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
検索結果を表示する(HTTP)
10
HTTPリクエストで検索ができる。下記のURLをブラウザで開くと、、、
http://localhost:3000/api/?q=barack+obama&nhits=20
http://localhost:3000/api/?q=%2Bbarack%20%2Bobama&nhits=20
http://localhost:3000/api/?q=-barack%20%2Bobama&nhits=20
http://localhost:3000/api/?q=%22barack%20obama%22&nhits=20
検索結果がブラウザに JSONで表示されます🎊
(JSONを返すHTTPサーバが内包されている)
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
検索結果を表示する(CLI)
11
$ tantivy search -i wikipedia-index -q "barack obama"
検索結果がコンソールに JSONで表示されます
🎉
(こちらは、サーバの立ち上げが不要!です)
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
どうやってるのか?(コマンドの解説)
$ tantivy new -i wikipedia-index
→ RDBで例えると、テーブルのカラム情報を対話式で作る
→ サンプルのwikipedia-indexテーブルにはtitle列、body列、url列があって、検索
Indexを付与するか?しないか?とか指定する感じ
$ cat wiki-articles-1000.json | tantivy index -i ./wikipedia-index
→ RDBで例えると、テーブルにデータを入れる(Insert)
→ wikipedia-indexテーブルにJSONのtitle属性、body属性、url属性のデータリストを
入れるよ😉
12
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
どうやってるのか?(コマンドの解説)
対話式でカラム情報を作るところを細かく
$ tantivy new -i wikipedia-index
New field name ? title ← カラム名
Choose Field Type (Text/u64/i64/f64/Date/Facet/Bytes) ? Text ← テキスト情報だよ
Should the field be stored (Y/N) ? Y ← フィールドを保存するか?
Should the field be indexed (Y/N) ? Y ← フィールドにインデックスを付与するか?
Should the term be tokenized? (Y/N) ? Y ← 全文検索のための解析をするか?
Should the term frequencies (per doc) be in the index (Y/N) ? Y ← ドキュメントごとの頻度をイ
ンデックスに含める必要があるか?
Should the term positions (per doc) be in the index (Y/N) ? Y ← ドキュメントごとの位置をイン
デックスに含める必要があるか?
Add another field (Y/N) ? Y ← 他のフィールドの作成も必要か?
13
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
どうやってるのか?(コマンドの解説)
登録するJSONデータについて(例:1行だけ
{
"url":"https://en.wikipedia.org/wiki?curid=48687903",
"title":"Jeon Hye-jin (actress, born 1988)",
"body":"nJeon Hye-jin (actress, born 1988)nnJeon Hye-jin (born June 17,
1988) is a South Korean actress.nPersonal life.nJeon married his "Smile, You"
co-star Lee Chun-hee on March 11, 2011. Their daughter, Lee So Yu, was born on
July 30, 2011.nn"
}
14
対話で作ったカラム名と JSONの属性名を合わ
せて、
格納するデータの形式を合わせる
(とりあえず、JSON突っ込めば良いわけではない)
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
Rustを使ったことなくても
お試しできました😉
15
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
続いて、Bayardを試してみよ😏
(日本語のデータも全文検索したいですよね!)
16
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
Bayardについて
Raft Consensus Algorithm と gRPC を実装する、
Rustで記述された全文検索およびインデックス作成のサーバー
です。
前述のTantivyをベースに開発されていて
Bayardを使用すると、高可用性を備えた全文検索アプリケー
ションを簡単に開発できます。
17
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
5. Bayardの特徴について
GitHubからの引用ですが、下記のようなことができます。
• 全文検索/索引付け(日本語対応)ができる
• REST APIが利用できる
• コマンドライン・インターフェイスが利用できる
• インデックスの複製ができる
• クラスターを立ち上げる
日本語対応には「Lindera(Rust製日本語形態素解析)」が使わ
れています
18
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
6. Bayard-RESTを試してみた
1. GitHubからソースコードをクローンする
(BayardのGitHubのリポジトリをクローンして、クローンしたディレクトリに移動します。)
19
$ git clone https://github.com/bayard-search/bayard.git # クローンする
$ cd bayard
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
6. Bayard-RESTを試してみた
2. docker-compose.ymlのスキーマファイルの指定を英語から日本語に変える
→ スキーマファイルはTantivyの時に対話式で作った部分
→ デフォルトで英語のスキーマのサンプルを読み込んで起動するので、日本語のスキーマのサンプルに変え
ます(変更点は以下のオレンジ色の箇所です。)
20
version: '3'
services:
bayard:
container_name: bayard
volumes:
- ./examples/schema_ja.json:/etc/bayard/schema_ja.json # 日本語のサンプルスキーマをマウ
ント
command:
:
:
:
- '--schema-file=/etc/bayard/schema_ja.json' # マウントしたスキーマを指定
:
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
6. Bayard-RESTを試してみた
3. 起動して日本語のサンプルデータを登録し、全文検索します
→ 日本語のスキーマのサンプルに合わせたテストデータが用意されているため、そのデータを登録します。
登録した後には、必ず、commitが必要です。
21
$ docker-compose up -d # dockerコンテナ起動
$ curl -X PUT 
--header 'Content-Type: application/json' 
--data-binary @./examples/doc_ja.json 
'http://localhost:8000/v1/documents/1' # サンプルデータ登録
$ curl -X GET 'http://localhost:8000/v1/commit' # 登録をコミット
$ curl -X POST 'http://localhost:8000/v1/search' --data-binary 'description:検索' # 「検索」で全文
検索する
{"_id":["1"],"description":["検索エンジン(けんさくエンジン、英: search engine)は、狭義にはイン
ターネットに存在する情報(ウェブページ、ウェブサイト、画像ファイル、ネットニュースなど)を検索する機能
およびそのプログラム。インターネットの普及初期には、検索としての機能のみを提供していたウェブサイト
そのものを検索エンジンと呼んだが、現在では様々なサービスが加わったポータルサイト化が進んだた
め、検索をサービスの一つとして提供するウェブサイトを単
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
7. Bayardの使い方・まとめ
実際に使う際には検索画面などの
フロントエンド開発に加えて、
初期データを登録するバッチプログラムや、全文検索データを更新し
たい時に差分登録するプログラムなどが必要になります。
REST APIが用意されているため、バックエンドの開発がなくても良いの
は、
お手軽に日本語の全文検索エンジンを試せるので、良い感じで
す!
22
虎の穴 虎の穴 虎の穴 虎の穴
Copyright © 2020 Toranoana Inc. All Rights Reserved.
ありがとうございました🙏
23

Mais conteúdo relacionado

Mais procurados

イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
 
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)NTT DATA Technology & Innovation
 
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)株式会社MonotaRO Tech Team
 
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかRustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかShunsukeNakamura17
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)mosa siru
 
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Takayuki Shimizukawa
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容sairoutine
 
データ分析を支える技術 DWH再入門
データ分析を支える技術 DWH再入門データ分析を支える技術 DWH再入門
データ分析を支える技術 DWH再入門Satoru Ishikawa
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
InternetWeek2022 - インターネット広告の羅針盤
InternetWeek2022 - インターネット広告の羅針盤InternetWeek2022 - インターネット広告の羅針盤
InternetWeek2022 - インターネット広告の羅針盤MicroAd, Inc.(Engineer)
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについてmoai kids
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームKouhei Sutou
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
DBREから始めるデータベースプラットフォーム
DBREから始めるデータベースプラットフォームDBREから始めるデータベースプラットフォーム
DBREから始めるデータベースプラットフォームInsight Technology, Inc.
 
協調フィルタリング入門
協調フィルタリング入門協調フィルタリング入門
協調フィルタリング入門hoxo_m
 
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveDXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveTokoroten Nakayama
 

Mais procurados (20)

イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
 
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
 
ゼロから始める転移学習
ゼロから始める転移学習ゼロから始める転移学習
ゼロから始める転移学習
 
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかRustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったか
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
 
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
nginx入門
nginx入門nginx入門
nginx入門
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容
 
データ分析を支える技術 DWH再入門
データ分析を支える技術 DWH再入門データ分析を支える技術 DWH再入門
データ分析を支える技術 DWH再入門
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
InternetWeek2022 - インターネット広告の羅針盤
InternetWeek2022 - インターネット広告の羅針盤InternetWeek2022 - インターネット広告の羅針盤
InternetWeek2022 - インターネット広告の羅針盤
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについて
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
DBREから始めるデータベースプラットフォーム
DBREから始めるデータベースプラットフォームDBREから始めるデータベースプラットフォーム
DBREから始めるデータベースプラットフォーム
 
協調フィルタリング入門
協調フィルタリング入門協調フィルタリング入門
協調フィルタリング入門
 
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveDXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
 

Mais de 虎の穴 開発室

Railsのデバッグ どうやるかを改めて確認する
Railsのデバッグ どうやるかを改めて確認するRailsのデバッグ どうやるかを改めて確認する
Railsのデバッグ どうやるかを改めて確認する虎の穴 開発室
 
虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴ラボ エンジニア採用説明資料 .pdf虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴ラボ エンジニア採用説明資料 .pdf虎の穴 開発室
 
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdfDeno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf虎の穴 開発室
 
toranoana.deno #6 アジェンダ 採用説明
toranoana.deno #6 アジェンダ 採用説明toranoana.deno #6 アジェンダ 採用説明
toranoana.deno #6 アジェンダ 採用説明虎の穴 開発室
 
Deno 向け WEB 開発用のツールを作ったので 紹介します
Deno 向け WEB 開発用のツールを作ったので 紹介しますDeno 向け WEB 開発用のツールを作ったので 紹介します
Deno 向け WEB 開発用のツールを作ったので 紹介します虎の穴 開発室
 
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –虎の穴 開発室
 
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと虎の穴 開発室
 
通販開発部の西田さん「通販開発マネジメントの5ルール」
通販開発部の西田さん「通販開発マネジメントの5ルール」通販開発部の西田さん「通販開発マネジメントの5ルール」
通販開発部の西田さん「通販開発マネジメントの5ルール」虎の穴 開発室
 
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!虎の穴 開発室
 
セキュリティを強化しよう!CloudArmorの機能解説
セキュリティを強化しよう!CloudArmorの機能解説セキュリティを強化しよう!CloudArmorの機能解説
セキュリティを強化しよう!CloudArmorの機能解説虎の穴 開発室
 
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js   Node.js歓迎 〜 Deno で やってみるweb開発JavaScript LT会 〜 React.js   Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発虎の穴 開発室
 
Amplify Studioを使ってみた
Amplify Studioを使ってみたAmplify Studioを使ってみた
Amplify Studioを使ってみた虎の穴 開発室
 
いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!虎の穴 開発室
 
【Saitama.js】Denoのすすめ
【Saitama.js】Denoのすすめ【Saitama.js】Denoのすすめ
【Saitama.js】Denoのすすめ虎の穴 開発室
 
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について虎の穴 開発室
 
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜	【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜 虎の穴 開発室
 
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント 虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント 虎の穴 開発室
 

Mais de 虎の穴 開発室 (20)

FizzBuzzで学ぶJavaの進化
FizzBuzzで学ぶJavaの進化FizzBuzzで学ぶJavaの進化
FizzBuzzで学ぶJavaの進化
 
Railsのデバッグ どうやるかを改めて確認する
Railsのデバッグ どうやるかを改めて確認するRailsのデバッグ どうやるかを改めて確認する
Railsのデバッグ どうやるかを改めて確認する
 
虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴ラボ エンジニア採用説明資料 .pdf虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴ラボ エンジニア採用説明資料 .pdf
 
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdfDeno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
 
toranoana.deno #6 アジェンダ 採用説明
toranoana.deno #6 アジェンダ 採用説明toranoana.deno #6 アジェンダ 採用説明
toranoana.deno #6 アジェンダ 採用説明
 
Deno 向け WEB 開発用のツールを作ったので 紹介します
Deno 向け WEB 開発用のツールを作ったので 紹介しますDeno 向け WEB 開発用のツールを作ったので 紹介します
Deno 向け WEB 開発用のツールを作ったので 紹介します
 
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
 
GCPの画像認識APIの紹介
GCPの画像認識APIの紹介 GCPの画像認識APIの紹介
GCPの画像認識APIの紹介
 
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
 
GitHub APIとfreshで遊ぼう
GitHub APIとfreshで遊ぼうGitHub APIとfreshで遊ぼう
GitHub APIとfreshで遊ぼう
 
通販開発部の西田さん「通販開発マネジメントの5ルール」
通販開発部の西田さん「通販開発マネジメントの5ルール」通販開発部の西田さん「通販開発マネジメントの5ルール」
通販開発部の西田さん「通販開発マネジメントの5ルール」
 
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
 
セキュリティを強化しよう!CloudArmorの機能解説
セキュリティを強化しよう!CloudArmorの機能解説セキュリティを強化しよう!CloudArmorの機能解説
セキュリティを強化しよう!CloudArmorの機能解説
 
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js   Node.js歓迎 〜 Deno で やってみるweb開発JavaScript LT会 〜 React.js   Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
 
Amplify Studioを使ってみた
Amplify Studioを使ってみたAmplify Studioを使ってみた
Amplify Studioを使ってみた
 
いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!
 
【Saitama.js】Denoのすすめ
【Saitama.js】Denoのすすめ【Saitama.js】Denoのすすめ
【Saitama.js】Denoのすすめ
 
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
 
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜	【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
 
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント 虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
 

Último

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 

Último (20)

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 

Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた

  • 1. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. 全文検索エンジン(Tantivy/Bayard) を試してみた!! 虎の穴ラボ 古賀広隆 1
  • 2. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. 2 目次 1. 自己紹介 2. 全文検索エンジンについて 3. Tantivy(タエンティビィ)について 4. Tantivy-CLIを試してみた(Mac) 5. Bayard(バイヤール)の特徴について 6. Bayard-RESTを試してみた(Docker) 7. Bayardの使い方・まとめ
  • 3. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. 3 1. 自己紹介 出身地は佐賀です。三重県から地方勤務で虎の穴ラボの通販のチーム にいます。 (2020年12月入社、二児の父です。) 全般的にフロントエンドは得意、バックエンドの知識は古めです。 推し ・南條愛乃(FripSideのVocal) ・Node.js/Java ・Nuxt.js
  • 4. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. みなさま、全文検索エンジンを使っ ていますか? 4
  • 5. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. 2. 全文検索エンジンについて クラウドだと「Amazon Elasticsearch Service」や「Azure Cognitive Search」など、さまざまな選択肢があると思います。 今回は、虎の穴ラボの社内のWebツールに導入できそうな、 簡易的な全文検索エンジンにどのようなものがあるか調べた際に見つけ た「Tantivy/Bayard」という2つのRust製の全文検索エンジンを試し てみました。 5
  • 6. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. 3. Tantivyについて Rustで記述された、全文検索エンジンライブラリです。 高速で軽量(起動時間が短い)のが特徴です。 日本語(中国語、韓国語も)に対応(設定が必要)していて、 Apache Lucene(Elastic Search等)と似た設計になっている 欠点:分散検索できない (複数のDBに異なるデータを置いて、必要なDBを選択して検索的なこと) https://github.com/tantivy-search/tantivy 6
  • 7. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. 3. Tantivyについて ベンチマーク https://tantivy-search.github.io/bench/ (Luceneの約半分ぐらいの速度で検索できる) (一部、Luceneより遅い条件もあります) 7
  • 8. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. Rust!使ったことない・・😱 8
  • 9. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. 4. Tantivy-CLIが提供されてた😆 これだと、Rust使えなくても試せそうなので、早速、試してみる。 (最初にMacにRustをインストールします) 9 $ brew install rust $ cargo install tantivy-cli $ echo "export PATH="$HOME/.cargo/bin:$PATH"" >> ~/.zshrc $ source ~/.zshrc $ mkdir wikipedia-index $ tantivy new -i wikipedia-index # ドキュメントのプロパティ(title, body, url)の設定を対話式で作る(後ほど、スピーカーノート参照) $ curl -OL http://fulmicoton.com/tantivy-files/wiki-articles-1000.json $ cat wiki-articles-1000.json | tantivy index -i ./wikipedia-index # 11MB、一瞬で解析が終わる $ tantivy serve -i wikipedia-index # サーバの起動 listening on http://localhost:3000
  • 10. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. 検索結果を表示する(HTTP) 10 HTTPリクエストで検索ができる。下記のURLをブラウザで開くと、、、 http://localhost:3000/api/?q=barack+obama&nhits=20 http://localhost:3000/api/?q=%2Bbarack%20%2Bobama&nhits=20 http://localhost:3000/api/?q=-barack%20%2Bobama&nhits=20 http://localhost:3000/api/?q=%22barack%20obama%22&nhits=20 検索結果がブラウザに JSONで表示されます🎊 (JSONを返すHTTPサーバが内包されている)
  • 11. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. 検索結果を表示する(CLI) 11 $ tantivy search -i wikipedia-index -q "barack obama" 検索結果がコンソールに JSONで表示されます 🎉 (こちらは、サーバの立ち上げが不要!です)
  • 12. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. どうやってるのか?(コマンドの解説) $ tantivy new -i wikipedia-index → RDBで例えると、テーブルのカラム情報を対話式で作る → サンプルのwikipedia-indexテーブルにはtitle列、body列、url列があって、検索 Indexを付与するか?しないか?とか指定する感じ $ cat wiki-articles-1000.json | tantivy index -i ./wikipedia-index → RDBで例えると、テーブルにデータを入れる(Insert) → wikipedia-indexテーブルにJSONのtitle属性、body属性、url属性のデータリストを 入れるよ😉 12
  • 13. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. どうやってるのか?(コマンドの解説) 対話式でカラム情報を作るところを細かく $ tantivy new -i wikipedia-index New field name ? title ← カラム名 Choose Field Type (Text/u64/i64/f64/Date/Facet/Bytes) ? Text ← テキスト情報だよ Should the field be stored (Y/N) ? Y ← フィールドを保存するか? Should the field be indexed (Y/N) ? Y ← フィールドにインデックスを付与するか? Should the term be tokenized? (Y/N) ? Y ← 全文検索のための解析をするか? Should the term frequencies (per doc) be in the index (Y/N) ? Y ← ドキュメントごとの頻度をイ ンデックスに含める必要があるか? Should the term positions (per doc) be in the index (Y/N) ? Y ← ドキュメントごとの位置をイン デックスに含める必要があるか? Add another field (Y/N) ? Y ← 他のフィールドの作成も必要か? 13
  • 14. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. どうやってるのか?(コマンドの解説) 登録するJSONデータについて(例:1行だけ { "url":"https://en.wikipedia.org/wiki?curid=48687903", "title":"Jeon Hye-jin (actress, born 1988)", "body":"nJeon Hye-jin (actress, born 1988)nnJeon Hye-jin (born June 17, 1988) is a South Korean actress.nPersonal life.nJeon married his "Smile, You" co-star Lee Chun-hee on March 11, 2011. Their daughter, Lee So Yu, was born on July 30, 2011.nn" } 14 対話で作ったカラム名と JSONの属性名を合わ せて、 格納するデータの形式を合わせる (とりあえず、JSON突っ込めば良いわけではない)
  • 15. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. Rustを使ったことなくても お試しできました😉 15
  • 16. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. 続いて、Bayardを試してみよ😏 (日本語のデータも全文検索したいですよね!) 16
  • 17. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. Bayardについて Raft Consensus Algorithm と gRPC を実装する、 Rustで記述された全文検索およびインデックス作成のサーバー です。 前述のTantivyをベースに開発されていて Bayardを使用すると、高可用性を備えた全文検索アプリケー ションを簡単に開発できます。 17
  • 18. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. 5. Bayardの特徴について GitHubからの引用ですが、下記のようなことができます。 • 全文検索/索引付け(日本語対応)ができる • REST APIが利用できる • コマンドライン・インターフェイスが利用できる • インデックスの複製ができる • クラスターを立ち上げる 日本語対応には「Lindera(Rust製日本語形態素解析)」が使わ れています 18
  • 19. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. 6. Bayard-RESTを試してみた 1. GitHubからソースコードをクローンする (BayardのGitHubのリポジトリをクローンして、クローンしたディレクトリに移動します。) 19 $ git clone https://github.com/bayard-search/bayard.git # クローンする $ cd bayard
  • 20. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. 6. Bayard-RESTを試してみた 2. docker-compose.ymlのスキーマファイルの指定を英語から日本語に変える → スキーマファイルはTantivyの時に対話式で作った部分 → デフォルトで英語のスキーマのサンプルを読み込んで起動するので、日本語のスキーマのサンプルに変え ます(変更点は以下のオレンジ色の箇所です。) 20 version: '3' services: bayard: container_name: bayard volumes: - ./examples/schema_ja.json:/etc/bayard/schema_ja.json # 日本語のサンプルスキーマをマウ ント command: : : : - '--schema-file=/etc/bayard/schema_ja.json' # マウントしたスキーマを指定 :
  • 21. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. 6. Bayard-RESTを試してみた 3. 起動して日本語のサンプルデータを登録し、全文検索します → 日本語のスキーマのサンプルに合わせたテストデータが用意されているため、そのデータを登録します。 登録した後には、必ず、commitが必要です。 21 $ docker-compose up -d # dockerコンテナ起動 $ curl -X PUT --header 'Content-Type: application/json' --data-binary @./examples/doc_ja.json 'http://localhost:8000/v1/documents/1' # サンプルデータ登録 $ curl -X GET 'http://localhost:8000/v1/commit' # 登録をコミット $ curl -X POST 'http://localhost:8000/v1/search' --data-binary 'description:検索' # 「検索」で全文 検索する {"_id":["1"],"description":["検索エンジン(けんさくエンジン、英: search engine)は、狭義にはイン ターネットに存在する情報(ウェブページ、ウェブサイト、画像ファイル、ネットニュースなど)を検索する機能 およびそのプログラム。インターネットの普及初期には、検索としての機能のみを提供していたウェブサイト そのものを検索エンジンと呼んだが、現在では様々なサービスが加わったポータルサイト化が進んだた め、検索をサービスの一つとして提供するウェブサイトを単
  • 22. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. 7. Bayardの使い方・まとめ 実際に使う際には検索画面などの フロントエンド開発に加えて、 初期データを登録するバッチプログラムや、全文検索データを更新し たい時に差分登録するプログラムなどが必要になります。 REST APIが用意されているため、バックエンドの開発がなくても良いの は、 お手軽に日本語の全文検索エンジンを試せるので、良い感じで す! 22
  • 23. 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2020 Toranoana Inc. All Rights Reserved. ありがとうございました🙏 23