SlideShare ist ein Scribd-Unternehmen logo
1 von 77
Downloaden Sie, um offline zu lesen
Fess/Elasticsearchを使った
業務で使える?全文検索への道
DBFluteフェス2017 1
DBFluteフェス 2017
■ 名前: 菅谷信介
■ オープンソース活動:
➔ Fess, DBFlute関連, Apache PredictionIO,...
■ Blog: http://www.chazine.com/
■ Twitter: https://twitter.com/shinsuke_sugaya/
■ DBFluteフェスのこの枠で話すのは3回目…
自己紹介
2
DBFluteフェス 2017
今日の本題
3
DBFluteフェス 2017
今日は
全文検索システムを作るとは?
を考えていきましょう
4
DBFluteフェス 2017
その前に前提として…
5
DBFluteフェス 2017
■ OSSの分散リアルタイム検索&分析エンジン
■ 特徴
➔ドキュメント指向な検索エンジン(Apache Lucene)
➔RESTfulなAPI
➔スキーマフリー
➔分散システム (高可用性、スケールアウト)
➔プラグインによる拡張
■ DBFlute的に使うならESFluteも
➔https://github.com/lastaflute/lastaflute-example-waterfront/
Elasticsearchとは
6
DBFluteフェス 2017
■ オープンソースの全文検索システム
➔オールインワンで簡単に利用可能
■ Apacheライセンスで提供
■ Elasticsearchを検索エンジンとして利用
■ 現在の最新バージョンは11.4
➔2009/09にSolrベースで1.0をリリース
■ 商用サポートも提供 (N2 Search)
Fessとは
7
http://fess.codelibs.org/ja/
DBFluteフェス 2017
さっそく
検索システムについて
考えていきましょう
8
DBFluteフェス 2017
どんなクエリーを考えますか?
9
たとえば
テスト
DBFluteフェス 2017
こんな感じとか?
10
{
"from": 0,
"size":20,
"query": {
"match_phrase": {
"content": "テスト"
}
}
}
検索クエリー例1
DBFluteフェス 2017
もうちょっとがんばってこんな感じとか?
11
{
"from": 0,
"size": 20,
"query": {
"bool": {
"should": [
{
"match_phrase": {
"title": "テスト"
}
},
{
"match_phrase": {
"content": "テスト"
}
}
]
}
}
}
検索クエリー例2
DBFluteフェス 2017
世の中
そんなに
あまくありません…
12
DBFluteフェス 2017
{
"from" : 0,
"size" : 20,
"timeout" : "10000ms",
"query" : {
"bool" : {
"must" : [
{
"function_score" : {
"query" : {
"bool" : {
"should" : [
{
"match_phrase" : {
"title" : {
"query" : "テスト",
"slop" : 0,
"boost" : 0.2
}
}
},
{
"match_phrase" : {
"content" : {
"query" : "テスト",
"slop" : 0,
"boost" : 0.1
}
}
},
{
"match_phrase" : {
"title_ja" : {
"query" : "テスト",
"slop" : 0,
"boost" : 1.0
}
}
},
{
"match_phrase" : {
"content_ja" : {
"query" : "テスト",
"slop" : 0,
"boost" : 0.5
}
}
},
{
"match_phrase" : {
"title_en" : {
"query" : "テスト",
"slop" : 0,
"boost" : 1.0
}
}
},
13
{
"match_phrase" : {
"content_en" : {
"query" : "テスト",
"slop" : 0,
"boost" : 0.5
}
}
}
],
"disable_coord" : false,
"adjust_pure_negative" : true,
"boost" : 1.0
}
},
"functions" : [
{
"filter" : {
"match_all" : {
"boost" : 1.0
}
},
"field_value_factor" : {
"field" : "boost",
"factor" : 1.0,
"modifier" : "none"
}
}
],
"score_mode" : "multiply",
"max_boost" : 3.4028235E38,
"boost" : 1.0
}
}
],
"filter" : [
{
"bool" : {
"should" : [
{
"term" : {
"role" : {
"value" : "1guest",
"boost" : 1.0
}
}
},
{
"term" : {
"role" : {
"value" : "Rguest",
"boost" : 1.0
}
}
}
],
"disable_coord" : false,
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
],
"disable_coord" : false,
"adjust_pure_negative" : true,
"boost" : 1.0
}
},
・
・
・
実際にはもっと長い…
Fessの検索クエリー
DBFluteフェス 2017
まずは
検索の基礎から
振り返っていきましょう
14
DBFluteフェス 2017
■ 文字列を解析して、索引を作る
■ 検索は索引から単語が含まれるIDリストを取得
転置インデックス
15
文書ID 文字列
1 東京スカイツリー
2 東京タワー
単語 文書IDリスト
東京 1, 2
スカイツリ 1
タワー 2
DBFluteフェス 2017
■ テキストを分解して単語群を生成する
■ LuceneはAnalyzerがある
■ CharFilter/Tokenizer/TokenFilterで構成される
■ 組み合わせることで自由自在の解析可能
■ インデックスの生成時に設定する
単語に分割する
16
「今日の天気は晴れです」
     ↓
「今日」「天気」「晴れ」
DBFluteフェス 2017
Analyzer
17
「東京スカイツリーの①番出口」
CharFilter (文字単位で変換)
TokenFilter (単語単位で変換)
Tokenizer (単語に分割)
「東京スカイツリーの1番出口」
「東京」「スカイツリー」「の」「1番」「出口」
「東京」「スカイツリ」「1番」「出口」
Analyzer
CharFilter (文字単位で変換)CharFilter (文字単位で変換)
TokenFilter (単語単位で変換)TokenFilter (単語単位で変換)
DBFluteフェス 2017
検索の全体像
18
インデックス検索
Analyzer
Analyzer
検索対象
検索時 クロール/インデクシング時
■ 検索とインデックス時にAnalyzerを利用
■ それぞれで別なAnalyzerも指定可能
■ 同じ単語にならなければヒットしない
DBFluteフェス 2017
よく使うクエリーを
見ていきましょう
19
DBFluteフェス 2017
■ 構造的なQuery DSLを利用
■ HTTPまたはTransportでリクエスト
■ 様々なクエリーをサポート(aggs, geo,...)
検索クエリー
20
$ curl -XPOST ‘localhost:9200/company/_search -d ‘{
“query” : {
"match_phrase" : {
"content" : "fess"
}
},
“size”: 10
}
DBFluteフェス 2017
■ 全件にマッチするクエリー
➔ count等で利用
Match All Query
21
{
"query": {
"match_all": {}
}
}
DBFluteフェス 2017
■ 解析された文字列にマッチするクエリー
➔ 全文検索で利用
➔ Match〜QueryはAnalyzerが適用される
■ 解析された文字列にマッチするので、lowercaseさ
れるならfluteはFluteにも一致する
➔ フレーズとしてはマッチしない
➔ 日本語bi-gramでは期待通りの結果にならない
Match Query
{
"query": {
"match": {
"product_name": "flute"
}
}
}
22
DBFluteフェス 2017
■ 解析された文字列のフレーズでマッチする
➔ タームの順番も含めて一致する
➔ 日本語の場合、ほぼこのクエリーを利用する
➔ Match Queryの場合、並び順に関係なく、ヒットする
➔ Match Queryでもphase指定で検索可能
Match Phrase Query
{
"query": {
"match_phrase": {
"product_name": "Low Price Flute"
}
}
}
23
DBFluteフェス 2017
■ 指定された値にマッチするクエリー
➔ テキスト解析はされず、値そのものにマッチする
➔ 区分値など、値のまま、インデックスしたものの検索
➔ keyword型のフィールドに対して利用
➔ Analyzerが適用されない
Term Query
{
"query": {
"term": {
"product_handle_code": {
"value": "FLUTE-01"
}
}
}
}
24
DBFluteフェス 2017
■ 前方一致のクエリー
➔ Term Queryの前方一致検索版
➔ テキスト解析されないフィールドで利用する
Prefix Query
{
"query": {
"prefix": {
"product_category": {
"value": "Ins"
}
}
}
}
25
DBFluteフェス 2017
■ 範囲指定検索
➔ 数値や日付を範囲指定する場合に利用する
➔ gt, gte, lt, lteで範囲を指定
Range Query
{
"query": {
"range": {
"latest_purchase_date": {
"gte": "2017-11-01",
"lte": "2017-11-30"
}
}
}
}
26
DBFluteフェス 2017
■ and/or/not条件を合成するクエリー
➔ and条件: mustで指定する(複数指定可能)
➔ or条件: shouldで指定する(複数指定可能)
➔ not条件: mustNotで指定する(複数指定可能)
➔ 絞り込み条件: filterで指定する(複数指定可能)
Bool Query
{
"query": {
"bool": {
"must": [...],
"should": [...],
"must_not": [...],
"filter": [...]
}
}
}
27
DBFluteフェス 2017
■ スコアを調整するクエリー
➔ functionsにマッチしたものをもとにスコアを変える
➔ queryには通常の検索条件を指定する
Function Score Query
{
"query": {
"function_score": {
"query": { ...ここに通常の条件を書く ... },
"functions": [
{
"filter": {
"match": {"test": "cat"} ←スコアを調整したい条件
},
"weight": 42
}
]
}
}
}
28
DBFluteフェス 2017
■ 検索時に集計処理も同時に行う
➔ 統計情報とかヒストグラムとか
➔ ファセットとかドリルダウンとか
Aggregation
29
{
"query": { ...検索条件... },
"aggs": {
"category": {
"terms": {
"field": "product_category",
"size": 10
}
}
}
}
DBFluteフェス 2017
■ フィールド値が範囲内にある件数を取得する
➔ Rangeが返却される
Range Aggregation
{
"query": { ...検索条件...},
"aggs": {
"price": {
"range": {
"field": "price",
"ranges": [
{
"from": 1000,
"to": 5000
},
…集計したい範囲の条件を記述...
]
}
}
}
}
30
DBFluteフェス 2017
■ 指定した単語が含まれる件数を取得する
➔ Termsが返却される
➔ 含まれる単語と件数が取得できる
Terms Aggregation
{
"query": { ...検索条件... },
"aggs": {
"category": {
"terms": {
"field": "product_category",
"size": 10
}
}
}
}
31
DBFluteフェス 2017
■ 指定したフィルタで項目を絞り込む
➔ 子のAggregationをフィルタするときに利用
■
➔
➔
Filter Aggregation
{
"query": { ...検索条件... },
"aggs": {
"handle_code": {
"filter": {
"term": { "product_handle_code": "FLUTE-01" }
},
"aggs": { ←フィルタされたあとの結果に対してのアグリゲーションを記述
"category": {
"terms": {
"field": "product_category"
}
}
}
}
}
}
32
DBFluteフェス 2017
■ 文字列: keyword, text
■ 数値: long, integer, short, byte, double, float,
half_float, scaled_float
■ 日付: date
■ 論理値: boolean
■ バイナリ: binary
■ 範囲: integer_range, float_range, double_range,
date_range
■ その他: object, geo_point, geo_shape, ip,
completion, token_count, …(独自定義も可能)
基本的な型
33
DBFluteフェス 2017
ここからは
さまざま疑問を
見ていきましょう
34
DBFluteフェス 2017
部分一致検索をしたいのですが?
35
DBFluteフェス 2017
■ 全文検索なので基本は部分一致
➔LIKE的な要件…
■ 逆に、完全一致の要件が必要なら、Term Queryが
必要
部分一致検索?
36
DBFluteフェス 2017
「魚」で検索しても
ヒットしないみたいです
37
DBFluteフェス 2017
■ bi-gramのインデックスではヒットしない
➔2文字単位で単語になっているため
➔「魚料理」→「魚料」「料理」
■ uni-gramのインデックスにする?
➔インデックスサイズが大きくなる…
■ 形態素解析のインデックスにする?
➔一文字に分割されないものもある
➔「魚料理」→「魚」「料理」(この場合「理」とか☓)
■ bi-gramのままでPrefix Queryにする
➔魚?で「魚料」にヒットさせる
➔インデックスする文字列にも最後に1文字加える
一文字検索
38
DBFluteフェス 2017
クリック数やLike数が
多いものを上位に表示したいですね
39
DBFluteフェス 2017
■ クリック数やLike数をドキュメントに保持する
■ クリック数は検索結果クリック時に集計
➔リンクを書き換えてリダイレクト
■ Function Score Queryでスコアに反映する
検索ログの取得
40
利用者
Fess
検索結果を表示
検索結果をクリック
検索結果へリダイレクト
検索結果のサイト
ここでクリック情報を取得
DBFluteフェス 2017
日本語はもちろん
英語、フランス語、ドイツ語、中国語…
で検索したいです
41
DBFluteフェス 2017
■ 全各言語用に様々なAnalyzerが必要
➔日本語だとKuromojiとか
■ 言語固有とbi-gramの2つのインデックス作成
➔日本語なら形態素解析とbi-gramの2種類
➔or検索(boolのshould等)をする
■ Fessでは多言語の設定を利用
➔いろいろと書いてあるので必要なところ参考に
https://github.com/codelibs/fess/blob/11.4.x/src/main/resources/fess_indices/fess.json
■ さらにFessでは言語自動判定も利用
多言語での検索
42
DBFluteフェス 2017
辞書はいつ反映されるの?
43
DBFluteフェス 2017
■ Analyzer等の辞書はインデックスのオープン時に
読み込まれる
➔クローズして再オープンする
➔Fessは拡張してリアルタイム再読込させる機能がある
■ インデックス時の書き込んだ単語は再インデックス
しないと、単語が一致しない場合は検索できない
辞書の反映
44
DBFluteフェス 2017
特定の検索語のときに
関連する検索語も
一緒に検索したいですね
45
DBFluteフェス 2017
■ Google Search Applianceが保有する機能なので
普通に要求される場合が多い
■ Analyzerで同義語辞書で対応可能な場合もある
➔リアルタイムな反映が求められると☓
■ 関連クエリーと同等なものを作るしかない
➔Fessでは実装済み
➔関連コンテンツ的な機能もあったり…
関連クエリー
46
DBFluteフェス 2017
類似する結果はまとめたいな
47
DBFluteフェス 2017
■ ElasticsearchのField Collapsingを利用
➔指定したフィールドが同じものをまとめる
■ Fessではcontentをminhashでハッシュ化
➔類似したものは同じハッシュになる
類似結果をまとめる
48
DBFluteフェス 2017
検索結果にサムネイルも
一緒に表示したいのだけど
49
DBFluteフェス 2017
■ クロールとは別に画像生成処理を実行
■ HTMLであればページ内で指定された画像
➔metaタグのthumbnailかog:imageなど
➔ページ内のimgタグで正方形に近い画像など
➔PhantomJSなどでがんばる必要はない
■ PDFであればImageMagickのconvertコマンド
■ MS Officeはunoconvとconvertの合せ技
サムネイル画像
50
DBFluteフェス 2017
共有フォルダのファイルを
検索したい
51
DBFluteフェス 2017
■ http://〜の検索結果ページでfile://〜のリンクが機
能しない
➔セキュリティポリシーの設定で有効な場合もある?
■ 対応方法としては…
➔WebDAVでhttp://〜等でアクセス可能にする
➔Fessではプロキシとして対象ファイルを返却
file://〜問題
52
DBFluteフェス 2017
h1〜h3タグに書いてあるものは
上位に出したいね
53
DBFluteフェス 2017
■ GSAが特定のタグの値を優先する機能を持つ
■ 優先するフィールドを作成して、検索時にそのスコ
アをブーストする
➔Fessではtitleと同様のブーストするように設定
特定の情報を優先する
54
DBFluteフェス 2017
ここからは
クロール関連の話
55
DBFluteフェス 2017
■ 検索対象になるものはいろいろある
➔インターネット:http(s)
➔ファイルシステム:FS, SMB, FTP
➔データベース:JDBC
➔APIでアクセスできるもの:無数にある…
■ これらをクロール時には様々な罠も存在…
クロール対象
56
DBFluteフェス 2017
DBをクロール対象にしたい
57
DBFluteフェス 2017
■ Fessなら管理画面から設定可能
➔JDBCドライバがあるDBなら対応
➔select文とそのrowのマッピングを記述するだけ
➔elasticsearchのmappingも対応
DBも検索対象にしたい
58
DBFluteフェス 2017
数十〜数百サイトをクロールしたいな
59
DBFluteフェス 2017
■ 管理対象が多いと複雑なジョブ管理が必要
■ クロールの開始やスケジューリング等が必要
➔クラスタ構成等を考え出すとより開発工数が…
➔Fessではジョブ管理機能(lasta-jobベース)を実装
クロール処理の制御
60
DBFluteフェス 2017
どのくらいクロールに
時間がかかりますか?
61
DBFluteフェス 2017
■ スペックやクロール対象に依存する!
■ Webやファイルシステムだと1台で1時間あたり?万
ドキュメントくらい
■ DBからだともっといける(はず)
クロールにかかる時間
62
DBFluteフェス 2017
検索対象のサイトをhttps化したら
検索にヒットしなくなったんですけど
63
DBFluteフェス 2017
■ サイトのhttps化でクロール設定を変更忘れ
➔httpだけをクロール対象にしていた
➔サイトのhttps化で検索対象が全部消える…
➔人為的なミス
■ 最近https化が進んできているので、しばらくこの事
象が増えるかも…
https化による人災
64
DBFluteフェス 2017
特定のファイルでクロールが止まります
65
DBFluteフェス 2017
■ zipファイル爆弾
➔展開すると数Gのファイルになる
➔展開時には展開後のサイズの考慮が必要
■ excelファイル爆弾
➔何でもExcelにコピペする人がいる…
➔無駄な単語が膨大にあり、Analyzerで高負荷に…
■ Fessではこれの爆弾処理
➔ファイルサイズのチェック
➔単語の切り捨て
➔重複除去
などなど…
〜爆弾ファイル
66
DBFluteフェス 2017
PDFが文字化けしているようです
67
DBFluteフェス 2017
■ PDFのフォーマットにも複数のバージョン
■ テキスト抽出ならJavaだとPDFBoxとか
■ PDFBoxは古いバージョンで文字化けする
➔古いバージョンなので気にする必要はない
➔最近のPDFBoxは安定してきた
■ (おまけ)その他ではOCRのPDFとかの場合
➔無駄なスペースが入るので、独別な処理が必要
PDF文字化け
68
DBFluteフェス 2017
対応しているSMBバージョンは
なんですか?
69
DBFluteフェス 2017
■ SMBには1〜3.xのバージョンがある
■ jcifsはSMB1
➔SMB1を無効にした環境では使えない
➔Windows 2012あたりからSMB1を無効にできる
■ これから作るならSMBJとか?
➔Fessは近いうちに移行予定
SMBのバージョン
70
DBFluteフェス 2017
その他
71
DBFluteフェス 2017
_idの長さ問題
72
DBFluteフェス 2017
■ IDなのでユニークなら何でも良い
■ Elastisearchの_idは512バイトの長さまで
➔FessはURLベースで長い場合は部分的にハッシュ化
_idをどうするか
73
DBFluteフェス 2017
どのくらいのスペックが必要ですか?
74
DBFluteフェス 2017
■ 検索対象にもよるので一概に言えない
■ 1シャードの性能を見てみるとか
■ Elastisearchのドキュメントを見るとか
サイジング
75
DBFluteフェス 2017
まとめ
76
DBFluteフェス 2017
■ 検索システムを作るのもけっこう大変です
■ Lucene/Elasticsearchを直接使わなくても良い場合が
ほとんどでは?
➔ Fessを使ってください!(たぶんFessに任せたほうが楽)
➔ DB連携もJDBCでSQLを書くだけです
➔ 検索結果はJSONで取得できます
■ 検索自体を作りたい場合はLuceneやElasticsearchを
直接使うのが良いと思います
まとめ
77

Weitere ähnliche Inhalte

Was ist angesagt?

PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門泰 増田
 
グラフデータベース入門
グラフデータベース入門グラフデータベース入門
グラフデータベース入門Masaya Dake
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法Tetsutaro Watanabe
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようShinsuke Sugaya
 
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方Shinsuke Sugaya
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているKoichi Tanaka
 
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜Naruhiko Ogasawara
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜Takahiko Ito
 
AWSではじめるMLOps
AWSではじめるMLOpsAWSではじめるMLOps
AWSではじめるMLOpsMariOhbuchi
 
第10回solr勉強会 solr cloudの導入事例
第10回solr勉強会 solr cloudの導入事例第10回solr勉強会 solr cloudの導入事例
第10回solr勉強会 solr cloudの導入事例Ken Hirose
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!Tetsutaro Watanabe
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールdcubeio
 
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本kazuki kumagai
 
LIFULL HOME'SでのSolrの構成と運用の変遷
LIFULL HOME'SでのSolrの構成と運用の変遷LIFULL HOME'SでのSolrの構成と運用の変遷
LIFULL HOME'SでのSolrの構成と運用の変遷LIFULL Co., Ltd.
 
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめPostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめOhyama Masanori
 
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤Amazon Web Services Japan
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 

Was ist angesagt? (20)

Apache Solr 入門
Apache Solr 入門Apache Solr 入門
Apache Solr 入門
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
グラフデータベース入門
グラフデータベース入門グラフデータベース入門
グラフデータベース入門
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
SolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみようSolrとElasticsearchを比べてみよう
SolrとElasticsearchを比べてみよう
 
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜MongoDB〜その性質と利用場面〜
MongoDB〜その性質と利用場面〜
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
RESTfulとは
RESTfulとはRESTfulとは
RESTfulとは
 
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
 
AWSではじめるMLOps
AWSではじめるMLOpsAWSではじめるMLOps
AWSではじめるMLOps
 
第10回solr勉強会 solr cloudの導入事例
第10回solr勉強会 solr cloudの導入事例第10回solr勉強会 solr cloudの導入事例
第10回solr勉強会 solr cloudの導入事例
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
 
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本
 
LIFULL HOME'SでのSolrの構成と運用の変遷
LIFULL HOME'SでのSolrの構成と運用の変遷LIFULL HOME'SでのSolrの構成と運用の変遷
LIFULL HOME'SでのSolrの構成と運用の変遷
 
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめPostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめ
 
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 

Ähnlich wie Fess/Elasticsearchを使った業務で使える?全文検索への道

PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017Shigeru Hanada
 
Renewed using elasticsearchonaspnet-core5
Renewed using elasticsearchonaspnet-core5Renewed using elasticsearchonaspnet-core5
Renewed using elasticsearchonaspnet-core5Shotaro Suzuki
 
Elastic circle ci-co-webinar-20210127
Elastic circle ci-co-webinar-20210127Elastic circle ci-co-webinar-20210127
Elastic circle ci-co-webinar-20210127Shotaro Suzuki
 
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractSpring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractTakeshi Ogawa
 
Splunk 7.0の概要及び新機能
Splunk 7.0の概要及び新機能Splunk 7.0の概要及び新機能
Splunk 7.0の概要及び新機能Kunihiko Ikeyama
 
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 FukuokaPostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 FukuokaShigeru Hanada
 
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発Shinsuke Sugaya
 
What's New in the Elastic 8.4 Release
What's New in the Elastic 8.4 ReleaseWhat's New in the Elastic 8.4 Release
What's New in the Elastic 8.4 ReleaseShotaro Suzuki
 
[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法
[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法
[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法de:code 2017
 
Integrating elasticsearch with asp dot net core
Integrating elasticsearch with asp dot net coreIntegrating elasticsearch with asp dot net core
Integrating elasticsearch with asp dot net coreShotaro Suzuki
 
PostgreSQLをWatson Discoveryに接続する方法
PostgreSQLをWatson Discoveryに接続する方法PostgreSQLをWatson Discoveryに接続する方法
PostgreSQLをWatson Discoveryに接続する方法Kohei Nishikawa
 
20180922 jazug8 cosmosdb_search
20180922 jazug8 cosmosdb_search20180922 jazug8 cosmosdb_search
20180922 jazug8 cosmosdb_searchKazuhiro Wada
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2Atsuo Yamasaki
 
問合せ最適化インサイド
問合せ最適化インサイド問合せ最適化インサイド
問合せ最適化インサイドTakahiro Itagaki
 
Apexコアデベロッパーセミナー070726 配布用
Apexコアデベロッパーセミナー070726 配布用Apexコアデベロッパーセミナー070726 配布用
Apexコアデベロッパーセミナー070726 配布用stomita
 
RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会Nao Minami
 
Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた
Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみたAlfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた
Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみたTasuku Otani
 
Azure Search クックブック
Azure Search クックブックAzure Search クックブック
Azure Search クックブックKazuyuki Miyake
 
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月VirtualTech Japan Inc.
 
AppExchangeパートナー&デベロッパー第2部:20070523版
AppExchangeパートナー&デベロッパー第2部:20070523版AppExchangeパートナー&デベロッパー第2部:20070523版
AppExchangeパートナー&デベロッパー第2部:20070523版Junichiro Tasaki
 

Ähnlich wie Fess/Elasticsearchを使った業務で使える?全文検索への道 (20)

PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017PostgreSQL 10 新機能 @オープンセミナー香川 2017
PostgreSQL 10 新機能 @オープンセミナー香川 2017
 
Renewed using elasticsearchonaspnet-core5
Renewed using elasticsearchonaspnet-core5Renewed using elasticsearchonaspnet-core5
Renewed using elasticsearchonaspnet-core5
 
Elastic circle ci-co-webinar-20210127
Elastic circle ci-co-webinar-20210127Elastic circle ci-co-webinar-20210127
Elastic circle ci-co-webinar-20210127
 
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contractSpring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contract
 
Splunk 7.0の概要及び新機能
Splunk 7.0の概要及び新機能Splunk 7.0の概要及び新機能
Splunk 7.0の概要及び新機能
 
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 FukuokaPostgreSQL 10 新機能 @OSC 2017 Fukuoka
PostgreSQL 10 新機能 @OSC 2017 Fukuoka
 
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
ESFluteによるElasticsearchでのO/Rマッパーを用いた開発
 
What's New in the Elastic 8.4 Release
What's New in the Elastic 8.4 ReleaseWhat's New in the Elastic 8.4 Release
What's New in the Elastic 8.4 Release
 
[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法
[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法
[DI08] その情報うまく取り出せていますか? ~ 意外と簡単、Azure Search で短時間で検索精度と利便性を向上させるための方法
 
Integrating elasticsearch with asp dot net core
Integrating elasticsearch with asp dot net coreIntegrating elasticsearch with asp dot net core
Integrating elasticsearch with asp dot net core
 
PostgreSQLをWatson Discoveryに接続する方法
PostgreSQLをWatson Discoveryに接続する方法PostgreSQLをWatson Discoveryに接続する方法
PostgreSQLをWatson Discoveryに接続する方法
 
20180922 jazug8 cosmosdb_search
20180922 jazug8 cosmosdb_search20180922 jazug8 cosmosdb_search
20180922 jazug8 cosmosdb_search
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
 
問合せ最適化インサイド
問合せ最適化インサイド問合せ最適化インサイド
問合せ最適化インサイド
 
Apexコアデベロッパーセミナー070726 配布用
Apexコアデベロッパーセミナー070726 配布用Apexコアデベロッパーセミナー070726 配布用
Apexコアデベロッパーセミナー070726 配布用
 
RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会
 
Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた
Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみたAlfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた
Alfresco勉強会#33 alfresco 5.1でコンテンツ自動削除を実装してみた
 
Azure Search クックブック
Azure Search クックブックAzure Search クックブック
Azure Search クックブック
 
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月
Elastic Stackの紹介とOpenStackでの活用事例(Searchlightなど) - OpenStack最新情報セミナー 2016年5月
 
AppExchangeパートナー&デベロッパー第2部:20070523版
AppExchangeパートナー&デベロッパー第2部:20070523版AppExchangeパートナー&デベロッパー第2部:20070523版
AppExchangeパートナー&デベロッパー第2部:20070523版
 

Mehr von Shinsuke Sugaya

LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようLastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようShinsuke Sugaya
 
PredictionIOでSparkMLを使った開発方法
PredictionIOでSparkMLを使った開発方法PredictionIOでSparkMLを使った開発方法
PredictionIOでSparkMLを使った開発方法Shinsuke Sugaya
 
PredictionIOのPython対応計画
PredictionIOのPython対応計画PredictionIOのPython対応計画
PredictionIOのPython対応計画Shinsuke Sugaya
 
PredictionIO構築入門
PredictionIO構築入門PredictionIO構築入門
PredictionIO構築入門Shinsuke Sugaya
 
Elasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバElasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバShinsuke Sugaya
 
ElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステムElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステムShinsuke Sugaya
 
Elasticsearch Authプラグインでアクセスコントロール
Elasticsearch AuthプラグインでアクセスコントロールElasticsearch Authプラグインでアクセスコントロール
Elasticsearch AuthプラグインでアクセスコントロールShinsuke Sugaya
 
DBFlute Mavenプラグインを用いてCRUD作成
DBFlute Mavenプラグインを用いてCRUD作成DBFlute Mavenプラグインを用いてCRUD作成
DBFlute Mavenプラグインを用いてCRUD作成Shinsuke Sugaya
 
DBFluteを用いて開発されている全文検索システムFess
DBFluteを用いて開発されている全文検索システムFessDBFluteを用いて開発されている全文検索システムFess
DBFluteを用いて開発されている全文検索システムFessShinsuke Sugaya
 
elasticsearchプラグイン入門
elasticsearchプラグイン入門elasticsearchプラグイン入門
elasticsearchプラグイン入門Shinsuke Sugaya
 
Solrベースの全文検索サーバ Fess
Solrベースの全文検索サーバ FessSolrベースの全文検索サーバ Fess
Solrベースの全文検索サーバ FessShinsuke Sugaya
 
オフィスに1台!全文検索Fess
オフィスに1台!全文検索Fessオフィスに1台!全文検索Fess
オフィスに1台!全文検索FessShinsuke Sugaya
 

Mehr von Shinsuke Sugaya (13)

LastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめようLastaFluteでKotlinをはじめよう
LastaFluteでKotlinをはじめよう
 
PredictionIOでSparkMLを使った開発方法
PredictionIOでSparkMLを使った開発方法PredictionIOでSparkMLを使った開発方法
PredictionIOでSparkMLを使った開発方法
 
PredictionIOのPython対応計画
PredictionIOのPython対応計画PredictionIOのPython対応計画
PredictionIOのPython対応計画
 
PredictionIO構築入門
PredictionIO構築入門PredictionIO構築入門
PredictionIO構築入門
 
Elasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバElasticsearchで作る形態素解析サーバ
Elasticsearchで作る形態素解析サーバ
 
ElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステムElasticsearchとTasteプラグインで作るレコメンドシステム
ElasticsearchとTasteプラグインで作るレコメンドシステム
 
Elasticsearch Authプラグインでアクセスコントロール
Elasticsearch AuthプラグインでアクセスコントロールElasticsearch Authプラグインでアクセスコントロール
Elasticsearch Authプラグインでアクセスコントロール
 
DBFlute Mavenプラグインを用いてCRUD作成
DBFlute Mavenプラグインを用いてCRUD作成DBFlute Mavenプラグインを用いてCRUD作成
DBFlute Mavenプラグインを用いてCRUD作成
 
DBFluteを用いて開発されている全文検索システムFess
DBFluteを用いて開発されている全文検索システムFessDBFluteを用いて開発されている全文検索システムFess
DBFluteを用いて開発されている全文検索システムFess
 
elasticsearchプラグイン入門
elasticsearchプラグイン入門elasticsearchプラグイン入門
elasticsearchプラグイン入門
 
Solrベースの全文検索サーバ Fess
Solrベースの全文検索サーバ FessSolrベースの全文検索サーバ Fess
Solrベースの全文検索サーバ Fess
 
Sc2009autumn s2robot
Sc2009autumn s2robotSc2009autumn s2robot
Sc2009autumn s2robot
 
オフィスに1台!全文検索Fess
オフィスに1台!全文検索Fessオフィスに1台!全文検索Fess
オフィスに1台!全文検索Fess
 

Fess/Elasticsearchを使った業務で使える?全文検索への道