Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
「うまく言えない」検索を叶える ― OpenSearchと生成AIで作る 類似プロジェクト検索
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Serverless Operations
February 15, 2026
82
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
「うまく言えない」検索を叶える ― OpenSearchと生成AIで作る 類似プロジェクト検索
Serverless Operations
February 15, 2026
More Decks by Serverless Operations
See All by Serverless Operations
2026年、知っておくべき最新 サーバレスTips10選/serverless-10-tips
slsops
13
5.7k
2026年、サーバーレスの現在地 -「制約と戦う技術」から「当たり前の実行基盤」へ- /serverless2026
slsops
3
560
Lambdalithアーキテクチャにより大きく進化するWeb APIの世界/lambdalith
slsops
5
1.3k
ITベンダーから見る内製化支援の本質/in-house-dev
slsops
1
850
Case Study for Repurposing Video Content With Generative AI / AWS Community Day Taiwan 2024
slsops
0
520
サーバーレスなユーザー認証認可の考慮事項と実践的プラクティス紹介 / slsdays-tokyo-2024
slsops
11
4.6k
サーバーレスで負荷試験を行う必要性と実践的プラクティスの紹介/slsdays-tokyo-2023
slsops
4
2.8k
Serverless Web Hosting Strategy For Modern Front-end Application
slsops
0
500
定期料金と従量課金を組み合わせたサブ スクリプション型サービスを作る/jp-stripe-02
slsops
0
620
Featured
See All Featured
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
The Cult of Friendly URLs
andyhume
79
6.9k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Facilitating Awesome Meetings
lara
57
7k
WCS-LA-2024
lcolladotor
0
630
How to Think Like a Performance Engineer
csswizardry
28
2.6k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.3k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
840
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
390
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
Transcript
ʮ͏·͘ݴ͑ͳ͍ʯݕࡧΛ͑Δ ― OpenSearchͱੜAIͰ࡞Δ ྨࣅϓϩδΣΫτݕࡧ 4FSWFSMFTT0QFSBUJPOT 4POV,JN
ࣗݾհ ۚɹઋ༏4POV,JN $00BU4FSWFSMFTT0QFSBUJPOT *OD 'VMMTUBDL"844FSWFSMFTT&OHJOFFS "84$PNNVOJUZ#VJMEFST 4FSWFSMFTT+1͓Αͼ άϩʔόϧ"84ίϛϡχςΟͰ׆ಈத
Ϗδωε՝ ʮ͋ΔϓϩδΣΫτͱࣅ͍ͯΔผͷϓϩδΣΫτΛݟ͚ͭΔʯۀͷলྗԽ طଘۀγεςϜͷݕࡧػೳෳࡶͳϑΟϧλʔΛࣄࡉ͔͘ઃఆ͠ͳ͚ΕͳΒͣɺ γεςϜػೳ͚ͩͰർ࿑ײ͕૿͢͜ͱͰۀ͕ԆؾຯʹͳΓɺਓฉ͘աఔ͕ෆՄܽ طଘۀγεςϜͷݕࡧػೳͰɺ ଟ͘ͷ߲ʹରͯ͠ΩʔϫʔυΛ ೖྗඞཁ
ͳͥɺࣅ͍ͯΔผͷϓϩδΣΫτΛݟ͚ͭΔඞཁ͕͋Δ͔ʁ "ϓϩδΣΫτ ɾ໘ੵɿ ᶷ ɾඅ༻ɿԯԁ ɾظؒɿ ɾಛᶃ ݸ͕ࣨଟ͘ɺಛघͳઃඋͱஅ ɾಛᶄ ਖ਼໘ʹಓ࿏͕͋Γɺଞࣼ
#ϓϩδΣΫτ $ϓϩδΣΫτ %ϓϩδΣΫτ ઃඋͷઃஔཁྖ ɾಛੑ֬ೝ ೖࡳʹඞཁͳॻྨɾखଓ͖ɺ ৹ࠪཁྖɾཁ݅Λ֬ೝ ಛघͳܗɾಛੑʹΑΔ ࢿࡐௐୡํ๏Λݕ౼
ΞΠσΟΞ σʔλΛجװγεςϜ%#͔Βநग़ɺ0QFO4FBSDIΠϯσοΫε࡞ ࣗવݴޠΛؚΉ֤σʔλ߲ͷϕΫτϧԽɺྨࣅݕࡧʢϕΫτϧݕࡧʣΛ࣮ ֤߲ผʹείΞϦϯάΛద༻͠ɺ্Ґͷݕࡧ݁ՌΛྨࣅϓϩδΣΫτͯ͠ Ϛονϯάɺ6*ग़ྗ ࣄ%# &NCFEEJOH .PEFM 0QFO4FBSDI ݕࡧ
ʮ͏·͘ݴ͑ͳ͍ʯ͍͋·͍ͳݕࡧ݅Λө͢Δํ๏ ਓʹΑͬͯɺঢ়گʹΑͬͯมΘͬͯ͘Δʮࣅ͍ͯΔʯΛݕࡧ݁Ռʹө͢Δ͜ͱ͕ཁ݅ ظؒΛͽͬͨΓ͋Δ࣌ͱܾͯ͠ΊΔͷͰͳ͘ɺʮͦͷลʯͱͯ͠ద༻͍ͨ͠ ࣗવݴޠʹهࡌ͞Ε͍ͯΔ͋ΔಛੑΛ࠷༏ઌͱ͠ɺ໘ੵɾඅ༻Λ࣍ͷ༏ઌॱҐͱͯ͠ద༻͍ͨ͠ ˞໘ੵɾඅ༻ͷ࠷େɾ࠷খΛࢦఆͤͣᐆດͳঢ়ଶͰݕࡧͰ͖ΔΑ͏ʹ͍ͨ͠ ͦͷଞɺݟ͚͍ͭͨϓϩδΣΫτͷ͕݅ʮ͏·͘ݴ͑ͳ͍ʯ߹ طଘγεςϜͰͷϑΟϧλʔઃఆͰͷݕࡧମݧΛ ৽γεςϜͰΑΓศརͳܗͰ࣮ݱ͢Δํ๏ͱɾɾʁ
ʮ͍͋·͍͞ʯʹରԠ͢ΔͨΊͷઓུ "ϓϩδΣΫτ ɾ໘ੵɿ ᶷ ɾඅ༻ɿԯԁ ɾظؒɿ ɾྃɿ݄ ɾಛᶃ ݸ͕ࣨଟ͘ɺಛघͳઃඋͱஅ ɾಛᶄ
ਖ਼໘ʹಓ࿏͕͋Γɺଞࣼ ᶃᐆດ͞ΛߏԽ͠ɺ ࣮ʹམͱ͠ࠐΊΔܗ ۩ମԽ ˞Ճॏׂ߹ͷ߹ܭ͕ ʹͳΔΑ͏ʹઃఆͯ͠ݕࡧ ᶄݕࡧ݁ՌෳͷϓϩδΣΫτ͕ ҰͰݟ͑ΔΑ͏ʹఏڙ͢Δ #ϓϩδΣΫτ 50% 25% 25% 0% 0% ໘ੵ අ༻ ಛ ྃ ֊ ɾ໘ੵɿ ᶷ ɾඅ༻ɿԯԁ ɾྃɿ݄ ɾಛ ओཁൖೖܦ࿏͕શͯࣼ $ϓϩδΣΫτ ɾ໘ੵɿ ᶷ ɾඅ༻ɿԯԁ ɾྃɿ݄ ɾಛ ਖ਼໘͔ΒͷԼΓࡔʹҙ %ϓϩδΣΫτ ɾ໘ੵɿ ᶷ ɾඅ༻ɿԯԁ ɾྃɿ݄ ɾಛ ͖͍͢൫ߏʹҙ ྨࣅ ྨࣅ ྨࣅ
ʮ͍͋·͍ʯͳͱॏΈ͚ͮΛద༻͢ΔGVODUJPO@TDPSF public filterAreaWithScale( origin: number, offset = 10, scale =
1000 ) { this.queryTemplate.query.bool.must.push({ function_score: { functions: [ { exp: { 'document.໘ੵ': { origin: origin, offset: offset, scale: scale, }, }, weight: weight }, ], }, }) return this } %FDBZ'VODUJPOT (BVTTJBO ڑ͕͍ۙ͘͝ͷ͕΄΅ຬɺΕΔ΄Ͳٸݮ &YQPOFOUJBM ڑͷ૿ՃʹͭΕͯҰఆͷׂ߹Ͱܧଓతʹݮগ -JOFBS ڑʹൺྫͯ͠ઢతʹείΞ͕ݮগ
ʮ͍͋·͍ʯͳͱॏΈ͚ͮΛద༻͢ΔGVODUJPO@TDPSF public filterAreaWithScale( origin: number, offset = 10, scale =
1000 ) { this.queryTemplate.query.bool.must.push({ function_score: { functions: [ { exp: { 'document.໘ੵ': { origin: origin, offset: offset, scale: scale, }, }, weight: weight }, ], }, }) return this } // ʮྨࣅʯΛө͢ΔͨΊͷϝιου // ࣄબޙɺεϥΠμʔͷॳظϩδοΫʹج͍ͮͯ // offset ͱ scale Λө͠·͢ // origin : ൺֱͷج४ͱͳΔ // offset : ج४ͱͷ͕ࠩ͜ͷҎͷ߹ɺείΞ͕ຬʢ1ʣͱΈͳ͞ΕΔൣғ // scale : ج४ͱͷ͕ࠩ scale Λ͑Δ߹ɺείΞʹө͞Εͳ͍ const searchQuery = new SearchQueryHelper() .setPageNumber(1) .setPageSize(25) .filterAreaWithScale(origin, offset, scale) .filterCostWithScale(origin, offset, scale) .filterPeriodWithScale(origin, offset, scale) .filterDeliveryDateWithScale(origin, offset, scale) .setSearchTextVector('ಛ', inputTextEmbedding.vector)
ࣗવݴޠͰϓϩδΣΫτͷಛΛݕࡧͰ͖ΔΑ͏ʹͳΔ·Ͱ ਖ਼نԽ͞Εͨ%#நग़σʔλҎ֎ͷݟੵॻɺܭըॻɺٞࣄɺͦͷଞ֤छࢿྉͳͲɺ ςΩετؚ͕·Ε͍ͯͳ͍εΩϟϯ1%'Λݕࡧ݁Ռʹө͢Δํ๏ ສ݅Λ͑ΔϓϩδΣΫτͷಛΛࣗવݴޠͰཧ͠ɺ ςΩετ͓ΑͼྨࣅݕࡧΛ࣮͢Δํ๏ɾɾʁ
લॲཧ͕ՄೳͳશͯͷछྨͷσʔλΛΑΓࠐΈɺߏԽ͢Δ | code | name | area | cost |
period | deliveryDate | |------|-----------|------|------------|--------|--------------| | 0001 | A project | 2000 | 1000000000 | 365 | 2023-01-01 | | 0002 | B project | 2000 | 1000000000 | 365 | 2023-01-02 | | 0003 | C project | 2000 | 1000000000 | 365 | 2023-01-03 | root/ ɹᵋ 0001/ ɹ ├ ܖɾਪਐ४උ/ ├ ૯߹ܭըॻ.pdf └ ܖॻ.pdf ├ ٞࣄ/ └ ͦͷଞ ... ϓϩδΣΫτ %# ϓϩδΣΫτ ؔ࿈ࢿྉ ɾॻྨ { "meta": { "code": "0001", "name": "A project" }, "document": { "area": 2000, "cost": 1000000000, "period": 1000000000, "startDate": "2022-01-01", "deliveryDate": 2023-01-01, "type": "GENERAL", "status": "DONE" }, "embeddings": [ { "vector": [ ... ], "text": { "key": "ಛᶃ", "value": "ݸ͕ࣨଟ͘ɺಛघͳઃඋͱஅ..." } }, { "vector": [ ... ], "text": { "key": "ಛᶄ", "value": "ਖ਼໘ʹಓ࿏͕͋Γɺଞࣼ..." } } ] } σʔλͳͲઈରͰදݱͰ͖Δ߲ Ϛελʔ%#͔Β&5-ॲཧ ྨࣅݕࡧʹඞཁͳ ߏԽσʔλੜ
ϓϩδΣΫτؒͷྨࣅɾಛΛݟ͚ͭΔͨΊͷج४Λཧ root/ ɹᵋ 0001/ ɹ ├ ܖɾਪਐ४උ/ ├ ૯߹ܭըॻ.pdf └
ܖॻ.pdf ├ ٞࣄ/ └ ͦͷଞ ... { "embeddings": [ { "vector": [ ... ], "text": { "key": "ಛᶃ", "value": "ݸ͕ࣨଟ͘ɺಛघͳઃඋͱஅ..." } }, { "vector": [ ... ], "text": { "key": "ಛᶄ", "value": "ਖ਼໘ʹಓ࿏͕͋Γɺଞࣼ..." } } ] } ϓϩδΣΫτ ؔ࿈ ࢿྉɾॻྨ 0$3ରԠͷ7-.ͰಡΈऔΓ ֤߲ʹؔ͢ΔධՁͱαϚϦʔΛ࡞ Ҭɾཧతཁ݅ ɾ൫ɺߦɺؾީ ґཔओʹؔ͢Δࣄ߲ ɾاۀಛੑɺ༷ ֎؍ɾҙঊతಛ ɾ֎นɺృɺ نʹؔ͢Δৄࡉ ɾ༧ࢉɺ໘ੵɺ֊ ઃඋʹؔ͢Δಛ ɾ֤छઃඋɺӄѹࣨ ߏతཁ݅ ɾ๏ɺ໔ɺ
ࣗવݴޠσʔλͷϋΠϒϦουݕࡧ { embeddings: [ { text: { key: "Ҭɾཧతཁ݅", value:
"..." }, vector: [...] }, { text: { key: "ઃඋʹؔ͢Δಛ", value: "..." }, vector: [...] }, ] } { query: { hybrid: { queries: [ { // ςΩετݕࡧΫΤϦʔ multi_match: { query: SEARCH_TEXT, fields: ["key", "value"] } }, { // ྨࣅݕࡧΫΤϦʔ knn: { embeddings: { vector: [...] } } } ] } }, search_pipeline: { phase_results_processors: [ { 'normalization-processor': { normalization: { technique: "min_max" }, combination: { technique: "arithmetic_mean", parameters: { // είΞϦϯάॏΈ͚ͮ // [text, vector] weights: [0.3, 0.7] } }, ignore_failure: false } } ] }
σʔλߏԽॲཧߏͷ֓ཁ ϓϩδΣΫτ %# ϓϩδΣΫτ ؔ࿈ ࢿྉɾॻྨ .PEFMT 4UPSBHF &5- 4USVDUVSJOH
0QFO4FBSDI $47࿈ܞ όονॲཧ ϑΝΠϧ Ξοϓϩʔυ όονॲཧ &5-͓Αͼ +40/ߏԽ 0$3 4VNNBSJ[JOH &NCFEEJOH *OEFYJOH ར༻ͨ͠ੜ"*Ϟσϧ ɾamazon.nova-[lite/pro]-* ɾamazon.titan-embedv2-[text/image]-* ɾnanonets/Nanonets-OCR-s (OSS)
-*7&%&.0 ྨࣅݕࡧΛద༻ͨ͠ΣϒΞϓϦέʔγϣϯͷϥΠϒσϞ
serverless.co.jp