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
Serverless Operations
February 15, 2026
90
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.8k
2026年、サーバーレスの現在地 -「制約と戦う技術」から「当たり前の実行基盤」へ- /serverless2026
slsops
3
600
Lambdalithアーキテクチャにより大きく進化するWeb APIの世界/lambdalith
slsops
5
1.3k
ITベンダーから見る内製化支援の本質/in-house-dev
slsops
1
860
Case Study for Repurposing Video Content With Generative AI / AWS Community Day Taiwan 2024
slsops
0
530
サーバーレスなユーザー認証認可の考慮事項と実践的プラクティス紹介 / slsdays-tokyo-2024
slsops
11
4.6k
サーバーレスで負荷試験を行う必要性と実践的プラクティスの紹介/slsdays-tokyo-2023
slsops
4
2.9k
Serverless Web Hosting Strategy For Modern Front-end Application
slsops
0
510
定期料金と従量課金を組み合わせたサブ スクリプション型サービスを作る/jp-stripe-02
slsops
0
630
Featured
See All Featured
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Site-Speed That Sticks
csswizardry
13
1.3k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
280
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
660
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.7k
Unsuck your backbone
ammeep
672
58k
The Cult of Friendly URLs
andyhume
79
6.9k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
sira's awesome portfolio website redesign presentation
elsirapls
0
300
Designing Experiences People Love
moore
143
24k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
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