Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ElasticsearchでScripting
Search
pisatoshi
April 21, 2014
Technology
8.1k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ElasticsearchでScripting
pisatoshi
April 21, 2014
More Decks by pisatoshi
See All by pisatoshi
Elasticsearch RerouteAPIを使ったシャード配置の制御
pisatoshi
0
6k
Elasticsearch trial and error
pisatoshi
3
4.2k
Other Decks in Technology
See All in Technology
JAWSUG TOHOKU 青森支部 「LoGoチャット」のAWS移行で 乗り越えたこと
taketakekaho
0
350
FinOps Agentが生んだ技術負債:コスト自動調査の落とし穴と解消までの道のり
oasis1994liveforever
2
160
AI導入は済んだ。次は統制を作り替える番だ_AI×開発組織 Summit 2026
techtekt
PRO
0
390
オントロジーって 結局なにもの? AI エージェントに「意味」を渡す知識設計の話
greenmidori
0
240
LambdaWebFunctionsを試してみた / exploring-lambda-web-functions
koukihosaka
1
360
How to Design Configuration for Rails Applications
willnet
1
850
スプシの手作業からの解脱 ~更新はClaude Codeに、見せ方と使い方はGASアプリに任せる~
kentarofujii
0
160
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
1
490
Conditional PED-ANOVA: Hyperparameter Importance in Hierarchical & Dynamic Search Spaces
pfn
PRO
0
140
自作バイナリを動かす「入口」8選
puhitaku
2
1.3k
LLM-as-a-Judgeは本当に信頼できるのか――評価器を評価する話
taka_aki
1
400
二歩目のフロントエンド・ウェブアクセシビリティ
camiha
2
690
Featured
See All Featured
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
760
エンジニアに許された特別な時間の終わり
watany
109
250k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
630
Mobile First: as difficult as doing things right
swwweet
225
10k
The Cult of Friendly URLs
andyhume
79
7k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
940
Deep Space Network (abreviated)
tonyrice
0
380
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
520
The agentic SEO stack - context over prompts
schlessera
0
970
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
Transcript
&MBTUJDTFBSDIͰ 4DSJQUJOH ୈճ&MBTUJDTFBSDIษڧձ !QJTBUPTIJ
ࣗݾհ ໊લୌాݾ !QJTBUPTIJ ॴଐגࣜձࣾ࢜௨ιϑτΣΞςΫϊϩδʔζ ੜଉͧ͠ʔ͔ ͓ࣄ#BB4ج൫։ൃɻݘͷࢄาɻ
4DSJQUJOH֓ཁ w ΫΤϦ࣮ߦ࣌ͷࣜධՁΛಠࣗͷϩδοΫͰΧελϚΠζͰ͖Δ ݕࡧ݁ՌͷϑΟʔϧυɾϑΟϧλϦϯά υΩϡϝϯτͷείΞ ݕࡧ݁ՌҰཡͷιʔτॱ ʜFUD w ଟ࠼ͳݴޠαϙʔτ .7&-
%FGBVMU +BWB4DSJQU 1ZUIPO (SPPWZ +BWB
େ·͔ͳྨ w %ZOBNJD4DSJQU ΫΤϦʹεΫϦϓτΛهड़ ͓खܰ w 1SFMPBEFE4DSJQU αʔόʹεΫϦϓτϑΝΠϧΛஔ &4@)0.&DPOpHTDSJQUT
Ұఆ࣌ؒຖʹϦϩʔυʢΠϯλʔόϧࢦఆՄೳʣ w /BUJWF4DSJQU +BWBͰ࣮ ࠷ $-"441"5)্ʹKBSϑΝΠϧΛஔ ىಈ࣌ʹϩʔυɺߋ৽࣌ཁ࠶ىಈ
4BNQMFT
ϑΟʔϧυͷจࣈྻஔ curl ‘http://localhost:9200/test/foo/_search?pretty' -d ' { "query" : { "match_all"
: {} }, "fields" : [ "body" ], "script_fields" : { “replaced" : { "script": "java.util.regex.Pattern.compile(\"[0-9]{2,4}-[0-9]{2,4}- [0-9]{4}\").matcher(_source.body).replaceAll(\"[ϐʔʔ]\")" } } }' ి൪߸ Β͖͠จࣈྻ ΛϚεΫͯ͠ΈΔ
ϑΟʔϧυͷจࣈྻஔ { "took" : 317, "timed_out" : false, "_shards" :
{ "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 1, "max_score" : 1.0, "hits" : [ { "_index" : "test", "_type" : "foo", "_id" : "5y7HmrMFQFq2y81KiMKXPQ", "_score" : 1.0, "fields" : { "replaced" : [ "͜Μʹͪɻ[ϐʔʔ]ʹిͯ͠Ͷɻ" ], "body" : [ "͜Μʹͪɻ090-1234-5678ʹిͯ͠Ͷɻ" ] } } ] } } ϚεΫͯ͠Έͨ݁Ռ
ݕࡧ݁ՌͷϑΟϧλϦϯά curl -XPOST ‘http://localhost:9200/test/state/_search?pretty' -d ' { "query" : {
"filtered" : { "query" : { "match_all" : {} }, "filter" : { "script" : { "params": { "len": 10 }, "script" : "_source.name!=null && _source.name.length()>=len" } } } } }' lOBNFzϑΟʔϧυ͕ࢦఆҎ্ͷυΩϡϝϯτͷΈฦ͢
%FMFUFCZRVFSZ curl -XDELETE ‘http://localhost:9200/test/state/_query' -d ' { "query" : {
"filtered" : { "query" : { "match_all" : {} }, "filter" : { "script" : { "params": { "len": 10 }, "script" : "_source.name!=null && _source.name.length()>=len" } } } } }' %FMFUFCZRVFSZͰ͑Δ lOBNFzϑΟʔϧυ͕ࢦఆҎ্ͷυΩϡϝϯτͷΈআ
ݕࡧ݁Ռͷιʔτ curl -XPOST ‘http://localhost:9200/test/state/_search?pretty' -d ' { "query": { "match_all":
{} }, "sort": { "_script": { "script": "_source.name != null?_source.name.length():0", "type" : "number" } } }' lOBNFzϑΟʔϧυͷ͞Λιʔτͱͯ͠ฦ͢ lUZQFzͰιʔτͷσʔλܕΛࢦఆ
/BUJWF4DSJQU
/BUJWF4DSJQUͷ࣮ w /BUJWF4DSJQU'BDUPSZΛ࣮ͯ͠OFX4DSJQU ϝιουΛΦʔόʔϥΠυ w "CTUSBDU4FBSDI4DSJQUΛܧঝͯ͠SVO ϝιουΛΦʔόʔϥΠυ public class MyScript
extends AbstractSearchScript {" ! public static class Factory extends AbstractComponent implements NativeScriptFactory{" ! @Inject" public Factory(Node node, Settings settings) {" }" ! @Override" public ExecutableScript newScript(@Nullable Map<String, Object> params) {" return new MyScript();" }" }" ! private MyScript() {" }" ! @Override" public Object run() {" return SOME_RESPONSE;" }" }
/BUJWF4DSJQUͰඇਖ਼نԽ /PEFΦϒδΣΫτʹΞΫηεͰ͖ΔͷͰ$MJFOU͑Δͣ ඥ͍ͨυΩϡϝϯτΛऔಘͯ͠ϑΟʔϧυʹηοτ͢Ε +0*/ͬΆ͍͜ͱ͕Ͱ͖ͦ͏ ɾɾɾͱࢥͬͨΒ͏͋ͬͨ IUUQTHJUIVCDPNJNPUPWFMBTUJDTFBSDIOBUJWFTDSJQUFYBNQMF ରԠ͕ͩɺʮTΛখจࣈʹʯमਖ਼͢Δ͚ͩͰରԠՄೳ
࠷ޙʹ
ΫϥελߏͰͷҙ w શͯͷϊʔυʹಉҰεΫϦϓτΛஔ͢Δ ϊʔυؒͰεΫϦϓτಉظ͞Εͳ͍ w ࠞͥΔͳةݥʂ ϊʔυؒͰͷεΫϦϓτͷόʔδϣϯҧ͍ͳͲݕ͠ͳ͍ ֤ϊʔυ໊લղܾ͑͞Ͱ͖Εϩʔυͨ͠εΫϦϓτΛ࣮ߦ͢Δ ಉҰ໊ͰҟͳΔεΫϦϓτΛஔͨ͠߹ɺॲཧ͢ΔϊʔυʹԠͯ͡ ҟͳΔ݁ՌΛฦ͢
w εΫϦϓτ࣮ߦՄೳͳϊʔυͰͷΈॲཧ͞ΕΔ ࣮ߦՄೳͳγϟʔυ͕ଘࡏ͢Δ߹ͦͷγϟʔυ͚ͩͰ࣮ߦ͢Δ ʢ࣮ߦͰ͖ͳ͍γϟʔυʹॲཧΛৼΓ͚ͳ͍ʜͬΆ͍ʣ ϓϥΠϚϦʗϨϓϦΧͷશγϟʔυͰεΫϦϓτΛ࣮ߦͰ͖ͳ͍߹ɺ ͦͷγϟʔυͰͷݕࡧΤϥʔʹͳΔ
ΫϥελߏͰͷҙ ී௨ʹݕࡧՄೳ ݕࡧϦΫΤετ͜ͳ͍ ී௨ʹݕࡧՄೳ ݕࡧࣦഊ ˞l#FMBTDPzͷΈͰεΫϦϓτ࣮ߦՄೳͳ߹
·ͱΊ w %ZOBNJD4DSJQU खܰʹࢼͤͯ։ൃ͚ w 1SFMPBEFE4DSJQU ΦʔτϦϩʔυศར w /BUJWF4DSJQU ੑೳ໘Ͱ࠷
εΫϦϓτͱͯ͠ͷखܰ͋͞·Γͳ͍ w ϊʔυؒͰͷεΫϦϓτͷಉظͯ͘͠Εͳ͍ શϊʔυʹಉ͡εΫϦϓτΛඋ͢Δඞཁ͕͋Δ େنͳΫϥελͩͱ໘
͓͠·͍