{"id":42966,"date":"2026-07-01T09:03:31","date_gmt":"2026-07-01T06:03:31","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/"},"modified":"2026-07-01T09:04:05","modified_gmt":"2026-07-01T06:04:05","slug":"spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/","title":{"rendered":"Spring Boot ve RAG ile Ad\u0131m Ad\u0131m Vekt\u00f6r Arama (2026)"},"content":{"rendered":"<h2>Spring Boot ve RAG ile Ad\u0131m Ad\u0131m Vekt\u00f6r Arama (2026)<\/h2>\n<p>Spring Boot ve Spring AI kullanarak RAG (Retrieval-Augmented Generation) sistemlerini, vekt\u00f6r aramay\u0131 ve embedding i\u015flemlerini ad\u0131m ad\u0131m bu rehberle ke\u015ffedin.<\/p>\n<p>Yapay zeka teknolojilerinin ba\u015f d\u00f6nd\u00fcr\u00fcc\u00fc bir h\u0131zla geli\u015fti\u011fi g\u00fcn\u00fcm\u00fczde, i\u015fletmeler kendi \u00f6zel verilerini kullanarak ak\u0131ll\u0131 asistanlar geli\u015ftirmek istiyor. Ancak, B\u00fcy\u00fck Dil Modelleri (Large Language Models &#8211; LLM) genel internet verileriyle e\u011fitildi\u011fi i\u00e7in \u015firketinizin g\u00fcncel stok bilgisine, \u00f6zel m\u00fc\u015fteri politikalar\u0131na veya tescilli d\u00f6k\u00fcmanlar\u0131na do\u011frudan eri\u015femez. \u0130\u015fte bu noktada, RAG (Retrieval-Augmented Generation &#8211; Bilgi Geri \u00c7a\u011f\u0131rma ile G\u00fc\u00e7lendirilmi\u015f \u00dcretim) mimarisi imdad\u0131m\u0131za yeti\u015fiyor. Bu makalede, Java ekosisteminin en g\u00fc\u00e7l\u00fc yaz\u0131l\u0131m \u00e7er\u00e7evesi (framework) olan Spring Boot ile ad\u0131m ad\u0131m profesyonel bir RAG sistemini nas\u0131l kuraca\u011f\u0131m\u0131z\u0131 inceleyece\u011fiz.<\/p>\n<h2>RAG (Retrieval-Augmented Generation) Nedir ve Neden \u00d6nemlidir?<\/h2>\n<p>\u00d6ncelikle, geleneksel yapay zeka modellerinin s\u0131n\u0131rlar\u0131n\u0131 anlamak RAG mimarisinin \u00f6nemini kavramam\u0131za do\u011frudan yard\u0131mc\u0131 olur. B\u00fcy\u00fck dil modelleri, e\u011fitim s\u00fcre\u00e7leri tamamland\u0131ktan sonra statik hale gelirler. Bu durum, modellerin g\u00fcncel olaylar veya kurum i\u00e7i \u00f6zel veriler hakk\u0131nda bilgi sahibi olmas\u0131n\u0131 tamamen engeller. E\u011fer modele do\u011frudan bilmedi\u011fi bir soru sorarsan\u0131z, b\u00fcy\u00fck olas\u0131l\u0131kla &#8220;hal\u00fcsinasyon (hallucination)&#8221; ad\u0131 verilen tamamen uydurma cevaplar \u00fcretecektir. Bu nedenle, i\u015fletmelerin kendi verilerini g\u00fcvenli, do\u011fru ve g\u00fcncel bir \u015fekilde yapay zeka modellerine beslemesi kritik bir zorunluluktur.<\/p>\n<p>RAG, bu sorunu k\u00f6kten \u00e7\u00f6zmek amac\u0131yla geli\u015ftirilmi\u015f yenilik\u00e7i bir mimaridir. Temel olarak, kullan\u0131c\u0131n\u0131n sordu\u011fu soruyu al\u0131r, \u015firket i\u00e7i bir veri havuzunda (genellikle bir vekt\u00f6r veritaban\u0131nda) arama yapar ve ilgili bilgi par\u00e7alar\u0131n\u0131 bulur. Ard\u0131ndan, bu bilgi par\u00e7alar\u0131n\u0131 orijinal soruyla birle\u015ftirerek dil modeline g\u00f6nderir. Sonu\u00e7 olarak, dil modeli kendisine sunulan bu ba\u011flam\u0131 (context) kullanarak son derece do\u011fru, g\u00fcncel ve \u015firket standartlar\u0131na uygun bir yan\u0131t \u00fcretir. Bu sayede model, bilmedi\u011fi konularda uydurmak yerine, kendisine verilen kaynak d\u00f6k\u00fcmanlara sad\u0131k kalarak cevap verir.<\/p>\n<p>Bununla birlikte, RAG mimarisi sadece do\u011frulu\u011fu art\u0131rmakla kalmaz, ayn\u0131 zamanda \u00fcst d\u00fczey veri g\u00fcvenli\u011fi de sa\u011flar. Hassas verilerinizi dil modelini yeniden e\u011fitmek (fine-tuning) i\u00e7in harici sunuculara g\u00f6ndermek zorunda kalmazs\u0131n\u0131z. Verileriniz kendi g\u00fcvenli yerel veritaban\u0131n\u0131zda kal\u0131r ve sadece ilgili k\u00fc\u00e7\u00fck par\u00e7alar anl\u0131k olarak modele iletilir. Dolay\u0131s\u0131yla, 2026 y\u0131l\u0131nda kurumsal Java d\u00fcnyas\u0131nda Spring Boot ile RAG uygulamalar\u0131 geli\u015ftirmek, g\u00fcvenli ve \u00f6l\u00e7eklenebilir yapay zeka \u00e7\u00f6z\u00fcmleri \u00fcretmenin en standart yolu haline gelmi\u015ftir.<\/p>\n<h3>Embedding (Vekt\u00f6r D\u00f6n\u00fc\u015f\u00fcm\u00fc) ve Vekt\u00f6r Veritabanlar\u0131 Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h3>\n<p>RAG sistemlerinin kalbinde, metinlerin bilgisayarlar\u0131n anlayabilece\u011fi matematiksel ifadelere d\u00f6n\u00fc\u015ft\u00fcr\u00fclmesi s\u00fcreci yatar. Bu i\u015fleme &#8220;embedding (vekt\u00f6r d\u00f6n\u00fc\u015f\u00fcm\u00fc)&#8221; ad\u0131n\u0131 veriyoruz. Bilgisayarlar kelimeleri do\u011frudan bizim gibi alg\u0131layamazlar. Bu y\u00fczden, her bir kelimeyi veya paragraf\u0131 y\u00fczlerce hatta binlerce boyuttan olu\u015fan birer say\u0131 dizisine (vekt\u00f6re) d\u00f6n\u00fc\u015ft\u00fcr\u00fcr\u00fcz. \u00d6rne\u011fin, &#8220;kedi&#8221; ve &#8220;k\u00f6pek&#8221; kelimelerinin vekt\u00f6rleri, anlamsal yak\u0131nl\u0131klar\u0131ndan dolay\u0131 uzayda birbirine \u00e7ok yak\u0131n konumlan\u0131rken, &#8220;bilgisayar&#8221; kelimesi bu iki kelimeden \u00e7ok daha uzak bir noktada yer al\u0131r.<\/p>\n<p>\u00d6te yandan, bu devasa say\u0131 dizilerini geleneksel ili\u015fkisel veritabanlar\u0131nda (SQL) saklamak ve bunlar \u00fczerinde h\u0131zl\u0131 aramalar yapmak olduk\u00e7a zordur. \u0130\u015fte bu ihtiyac\u0131 kar\u015f\u0131lamak amac\u0131yla &#8220;Vekt\u00f6r Veritabanlar\u0131 (Vector Databases)&#8221; geli\u015ftirilmi\u015ftir. Vekt\u00f6r veritabanlar\u0131, verileri anlamsal yak\u0131nl\u0131klar\u0131na g\u00f6re indeksler. Bir kullan\u0131c\u0131 soru sordu\u011funda, sistem bu soruyu da an\u0131nda bir vekt\u00f6re d\u00f6n\u00fc\u015ft\u00fcr\u00fcr. Ard\u0131ndan, kosin\u00fcs benzerli\u011fi (cosine similarity) gibi matematiksel y\u00f6ntemler kullanarak veritaban\u0131ndaki en yak\u0131n vekt\u00f6rleri bulur.<\/p>\n<p>B\u00f6ylece, kelime birebir e\u015fle\u015fmese bile anlamca en yak\u0131n olan belgeler saniyeler i\u00e7inde tespit edilir. \u00d6rne\u011fin, kullan\u0131c\u0131 &#8220;Cihaz\u0131m \u00e7al\u0131\u015fm\u0131yor&#8221; yazd\u0131\u011f\u0131nda, sistem &#8220;Ar\u0131za giderme k\u0131lavuzu&#8221; belgesini bulabilir. \u00c7\u00fcnk\u00fc her iki ifadenin anlamsal vekt\u00f6rleri birbirine son derece yak\u0131nd\u0131r. G\u00fcn\u00fcm\u00fczde PGvector, Milvus, Pinecone ve Qdrant gibi \u00e7\u00f6z\u00fcmler bu alanda lider konumdad\u0131r. Spring AI ise t\u00fcm bu veritabanlar\u0131yla tek bir ortak aray\u00fcz \u00fczerinden konu\u015fabilmemizi sa\u011flar.<\/p>\n<h2>Spring Boot ile RAG Projesi Nas\u0131l Haz\u0131rlan\u0131r?<\/h2>\n<p>Spring Boot ekosistemi, Spring AI projesinin olgunla\u015fmas\u0131yla birlikte yapay zeka entegrasyonlar\u0131nda devrim yaratm\u0131\u015ft\u0131r. Art\u0131k Python kullanmadan, tamamen Java d\u00fcnyas\u0131nda kalarak g\u00fc\u00e7l\u00fc RAG uygulamalar\u0131 geli\u015ftirebiliyoruz. \u0130lk olarak, projemizi olu\u015ftururken gerekli olan ba\u011f\u0131ml\u0131l\u0131klar\u0131 (dependencies) belirlememiz gerekiyor. Spring Initializr kullanarak bir Maven veya Gradle projesi ba\u015flatabiliriz.<\/p>\n<p>Bu projede Spring Boot 3.x s\u00fcr\u00fcm\u00fcn\u00fc ve Spring AI k\u00fct\u00fcphanelerini kullanaca\u011f\u0131z. Gerekli olan temel ba\u011f\u0131ml\u0131l\u0131klar\u0131 <code>pom.xml<\/code> dosyam\u0131za ekleyerek i\u015fe ba\u015fl\u0131yoruz. A\u015fa\u011f\u0131daki kod blo\u011funda, OpenAI ve PGvector entegrasyonu i\u00e7in gerekli olan ba\u011f\u0131ml\u0131l\u0131k tan\u0131mlar\u0131n\u0131 g\u00f6rebilirsiniz:<\/p>\n<div class=\"code-container\">\n<pre><code>&lt;dependencies&gt;\n    &lt;!-- Spring Boot Starter Web --&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n        &lt;artifactId&gt;spring-boot-starter-web&lt;\/artifactId&gt;\n    &lt;\/dependency&gt;\n\n    &lt;!-- Spring AI OpenAI Starter --&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;org.springframework.ai&lt;\/groupId&gt;\n        &lt;artifactId&gt;spring-ai-openai-spring-boot-starter&lt;\/artifactId&gt;\n    &lt;\/dependency&gt;\n\n    &lt;!-- Spring AI PGvector Store Starter --&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;org.springframework.ai&lt;\/groupId&gt;\n        &lt;artifactId&gt;spring-ai-pgvector-store-spring-boot-starter&lt;\/artifactId&gt;\n    &lt;\/dependency&gt;\n&lt;\/dependencies&gt;<\/code><\/pre>\n<\/div>\n<p>Ba\u011f\u0131ml\u0131l\u0131klar\u0131 ekledikten sonra, uygulamam\u0131z\u0131n harici servislerle nas\u0131l ileti\u015fim kuraca\u011f\u0131n\u0131 yap\u0131land\u0131rmam\u0131z gerekir. Bunun i\u00e7in <code>application.yml<\/code> dosyam\u0131za API anahtarlar\u0131m\u0131z\u0131 ve veritaban\u0131 ba\u011flant\u0131 bilgilerimizi ekliyoruz. Spring AI, bu yap\u0131land\u0131rmalar\u0131 otomatik olarak okur ve arka planda gerekli olan <code>ChatModel<\/code> ve <code>VectorStore<\/code> nesnelerini bizim i\u00e7in olu\u015fturur. Bu sayede, karma\u015f\u0131k ba\u011flant\u0131 kodlar\u0131 yazmak zorunda kalmadan do\u011frudan i\u015f mant\u0131\u011f\u0131m\u0131za odaklanabiliriz.<\/p>\n<h3>Spring AI ile Vekt\u00f6r Veritaban\u0131 Entegrasyonu Nas\u0131l Yap\u0131l\u0131r?<\/h3>\n<p>Uygulamam\u0131z\u0131n veritaban\u0131 ba\u011flant\u0131lar\u0131n\u0131 tamamlad\u0131ktan sonra, belgelerimizi vekt\u00f6r veritaban\u0131na y\u00fckleme a\u015famas\u0131na ge\u00e7ebiliriz. Bu s\u00fcre\u00e7 \u00fc\u00e7 temel ad\u0131mdan olu\u015fur: Belgeleri okumak, bunlar\u0131 k\u00fc\u00e7\u00fck par\u00e7alara (chunks) ay\u0131rmak ve son olarak embedding modellerini kullanarak vekt\u00f6r veritaban\u0131na kaydetmek. Spring AI, bu ad\u0131mlar\u0131n her biri i\u00e7in haz\u0131r bile\u015fenler sunar.<\/p>\n<p>\u00d6ncelikle, b\u00fcy\u00fck belgeleri do\u011frudan sisteme y\u00fcklemek verimsizdir. \u00c7\u00fcnk\u00fc dil modellerinin belirli bir token s\u0131n\u0131r\u0131 vard\u0131r. Bu nedenle, belgeleri daha k\u00fc\u00e7\u00fck, anlaml\u0131 par\u00e7alara b\u00f6lmeliyiz. Spring AI i\u00e7erisinde yer alan <code>TokenTextSplitter<\/code> s\u0131n\u0131f\u0131 bu i\u015flemi bizim yerimize otomatik olarak ger\u00e7ekle\u015ftirir. Ard\u0131ndan, <code>VectorStore<\/code> aray\u00fcz\u00fcn\u00fc kullanarak bu par\u00e7alar\u0131 veritaban\u0131na kaydederiz. A\u015fa\u011f\u0131daki \u00f6rnek Java kodunda, bu s\u00fcrecin nas\u0131l uyguland\u0131\u011f\u0131n\u0131 inceleyebilirsiniz:<\/p>\n<div class=\"code-container\">\n<pre><code>@Service\npublic class DocumentService {\n\n    private final VectorStore vectorStore;\n\n    public DocumentService(VectorStore vectorStore) {\n        this.vectorStore = vectorStore;\n    }\n\n    public void ingestDocument(String content) {\n        \/\/ Metni d\u00f6k\u00fcman nesnesine d\u00f6n\u00fc\u015ft\u00fcr\u00fcyoruz\n        Document document = new Document(content);\n\n        \/\/ B\u00fcy\u00fck metinleri 500 token'l\u0131k par\u00e7alara ay\u0131r\u0131yoruz\n        TokenTextSplitter splitter = new TokenTextSplitter(500, 100, 5, 10000, true);\n        List&lt;Document&gt; splitDocuments = splitter.apply(List.of(document));\n\n        \/\/ Par\u00e7alanm\u0131\u015f d\u00f6k\u00fcmanlar\u0131 vekt\u00f6r veritaban\u0131na kaydediyoruz\n        this.vectorStore.accept(splitDocuments);\n    }\n}<\/code><\/pre>\n<\/div>\n<p>Bu kod blo\u011fu sayesinde, g\u00f6nderdi\u011fimiz herhangi bir metin otomatik olarak k\u00fc\u00e7\u00fck par\u00e7alara ayr\u0131l\u0131r. Sonras\u0131nda Spring AI, arka planda OpenAI&#8217;\u0131n embedding servisini \u00e7a\u011f\u0131rarak bu metinlerin vekt\u00f6r kar\u015f\u0131l\u0131klar\u0131n\u0131 \u00fcretir ve PGvector veritaban\u0131m\u0131za kaydeder. Sonu\u00e7 olarak, anlamsal arama yapmaya haz\u0131r, son derece g\u00fc\u00e7l\u00fc bir veri taban\u0131na sahip oluruz.<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Senaryosu: Yerel Bir E-Ticaret SSS Sistemi Nas\u0131l Kurulur?<\/h2>\n<p>Konuyu daha iyi peki\u015ftirmek i\u00e7in T\u00fcrkiye pazar\u0131nda faaliyet g\u00f6steren &#8220;H\u0131zl\u0131Market&#8221; ad\u0131nda kurgusal bir e-ticaret sitesini ele alal\u0131m. Bu firman\u0131n en b\u00fcy\u00fck sorunu, m\u00fc\u015fterilerden gelen iade ve kargo sorular\u0131na an\u0131nda ve do\u011fru yan\u0131t verememektir. M\u00fc\u015fteri temsilcileri s\u00fcrekli ayn\u0131 sorular\u0131 yan\u0131tlamaktan yorulmaktad\u0131r. Biz de bu sorunu \u00e7\u00f6zmek i\u00e7in Spring Boot tabanl\u0131 bir RAG SSS (S\u0131k\u00e7a Sorulan Sorular) botu geli\u015ftirece\u011fiz.<\/p>\n<p>\u00d6ncelikle, T\u00fcrk\u00e7e dil yap\u0131s\u0131 sondan eklemeli oldu\u011fu i\u00e7in geleneksel arama motorlar\u0131 &#8220;iadem&#8221;, &#8220;iadeye&#8221;, &#8220;iademiz&#8221; gibi kelimeleri e\u015fle\u015ftirmekte zorlan\u0131r. Ancak embedding modelleri kelimelerin k\u00f6klerine ve anlamsal de\u011ferlerine odakland\u0131\u011f\u0131 i\u00e7in bu sorunu tamamen ortadan kald\u0131r\u0131r. Firman\u0131n iade politikas\u0131n\u0131 i\u00e7eren bir metnimiz oldu\u011funu varsayal\u0131m: &#8220;H\u0131zl\u0131Market \u00fczerinden sat\u0131n al\u0131nan elektronik \u00fcr\u00fcnler, ambalaj\u0131 a\u00e7\u0131lmad\u0131\u011f\u0131 s\u00fcrece 14 g\u00fcn i\u00e7inde \u00fccretsiz iade edilebilir. G\u0131da \u00fcr\u00fcnlerinde ise iade s\u00fcresi hijyen kurallar\u0131 gere\u011fi 3 g\u00fcnd\u00fcr.&#8221; Bu metni yukar\u0131da yazd\u0131\u011f\u0131m\u0131z <code>DocumentService<\/code> arac\u0131l\u0131\u011f\u0131yla vekt\u00f6r veritaban\u0131m\u0131za kaydediyoruz.<\/p>\n<p>Bir m\u00fc\u015fteri sisteme girip &#8220;Ald\u0131\u011f\u0131m kulakl\u0131\u011f\u0131 iade etmek istiyorum, ka\u00e7 g\u00fcn\u00fcm var?&#8221; diye sordu\u011funda s\u00fcre\u00e7 \u015fu \u015fekilde i\u015fler:<br \/>\n1. Sistem, kullan\u0131c\u0131n\u0131n sorusunu al\u0131r ve vekt\u00f6r aramas\u0131 yapar.<br \/>\n2. Vekt\u00f6r veritaban\u0131, &#8220;elektronik \u00fcr\u00fcnler 14 g\u00fcn i\u00e7inde iade edilebilir&#8221; bilgisini i\u00e7eren d\u00f6k\u00fcman par\u00e7as\u0131n\u0131 bulur.<br \/>\n3. Spring Boot, bu bilgiyi (ba\u011flam\u0131) ve kullan\u0131c\u0131n\u0131n sorusunu birle\u015ftirerek bir prompt (y\u00f6nerge) haz\u0131rlar.<br \/>\n4. Dil modeli, bu ba\u011flama dayanarak &#8220;Kulakl\u0131k bir elektronik \u00fcr\u00fcn oldu\u011fu i\u00e7in, ambalaj\u0131n\u0131 a\u00e7mad\u0131ysan\u0131z 14 g\u00fcn i\u00e7inde \u00fccretsiz olarak iade edebilirsiniz.&#8221; \u015feklinde harika bir T\u00fcrk\u00e7e yan\u0131t \u00fcretir.<\/p>\n<p>Geleneksel kelime aramas\u0131 ile modern vekt\u00f6r aramas\u0131 aras\u0131ndaki farklar\u0131 daha net g\u00f6rmek i\u00e7in a\u015fa\u011f\u0131daki kar\u015f\u0131la\u015ft\u0131rma tablosunu inceleyebilirsiniz:<\/p>\n<table>\n<thead>\n<tr>\n<th>\u00d6zellik<\/th>\n<th>Geleneksel Kelime Aramas\u0131 (SQL LIKE)<\/th>\n<th>Vekt\u00f6r Aramas\u0131 (Spring AI + RAG)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Arama Mant\u0131\u011f\u0131<\/td>\n<td>Birebir kelime e\u015fle\u015fmesine dayan\u0131r.<\/td>\n<td>Anlamsal ve kavramsal yak\u0131nl\u0131\u011fa dayan\u0131r.<\/td>\n<\/tr>\n<tr>\n<td>E\u015f anlaml\u0131 Kelimeler<\/td>\n<td>&#8220;\u0130ade&#8221; yaz\u0131ld\u0131\u011f\u0131nda &#8220;geri g\u00f6nderim&#8221; kelimesini bulamaz.<\/td>\n<td>&#8220;\u0130ade&#8221; ile &#8220;geri g\u00f6nderim&#8221; aras\u0131ndaki ba\u011f\u0131 anlar.<\/td>\n<\/tr>\n<tr>\n<td>Hata Tolerans\u0131<\/td>\n<td>Yaz\u0131m hatalar\u0131nda sonu\u00e7 \u00fcretemez.<\/td>\n<td>Yaz\u0131m hatalar\u0131n\u0131 kolayca tolere eder.<\/td>\n<\/tr>\n<tr>\n<td>Yan\u0131t Kalitesi<\/td>\n<td>Sadece ilgili d\u00f6k\u00fcman\u0131 listeler.<\/td>\n<td>Do\u011fal ve ak\u0131c\u0131 bir cevap \u00fcretir.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Bu tablo, RAG sistemlerinin m\u00fc\u015fteri deneyimini ne kadar k\u00f6kten de\u011fi\u015ftirebilece\u011fini a\u00e7\u0131k\u00e7a g\u00f6stermektedir. Dolay\u0131s\u0131yla, yerel pazardaki e-ticaret firmalar\u0131 bu teknolojiyi entegre ederek m\u00fc\u015fteri memnuniyetini art\u0131r\u0131rken operasyonel maliyetlerini de ciddi oranda d\u00fc\u015f\u00fcrebilirler.<\/p>\n<h2>Spring AI ve RAG Sistemlerinde Performans Nas\u0131l Optimize Edilir?<\/h2>\n<p>RAG sistemlerini yay\u0131na ald\u0131ktan sonra, ger\u00e7ek kullan\u0131c\u0131 y\u00fck\u00fc alt\u0131nda performans sorunlar\u0131 ya\u015fanabilir. Bu nedenle, sistemimizi optimize etmek i\u00e7in baz\u0131 ileri d\u00fczey teknikleri uygulamam\u0131z gerekir. Her \u015feyden \u00f6nce, d\u00f6k\u00fcmanlar\u0131 par\u00e7alama (chunking) stratejimiz \u00e7ok kritiktir. Par\u00e7a boyutu (chunk size) \u00e7ok k\u00fc\u00e7\u00fck olursa anlamsal b\u00fct\u00fcnl\u00fck kaybolur; \u00e7ok b\u00fcy\u00fck olursa da dil modeline gereksiz bilgi g\u00f6ndererek maliyetleri art\u0131r\u0131r\u0131z ve modelin kafas\u0131n\u0131 kar\u0131\u015ft\u0131r\u0131r\u0131z. Genellikle 500 ila 1000 token aras\u0131ndaki par\u00e7a boyutlar\u0131 en ideal performans\u0131 sunar.<\/p>\n<p>Buna ek olarak, &#8220;Metadata Filtering (Metaveri Filtreleme)&#8221; tekni\u011fini mutlaka kullanmal\u0131y\u0131z. \u00d6rne\u011fin, sadece &#8220;elektronik&#8221; kategorisindeki belgelerde arama yapmak istiyorsak, vekt\u00f6r aramas\u0131 yaparken bunu bir filtre olarak belirtebiliriz. Spring AI, metaveri filtrelerini destekler ve bu sayede arama uzay\u0131n\u0131 daraltarak \u00e7ok daha h\u0131zl\u0131 sonu\u00e7lar elde etmemizi sa\u011flar. A\u015fa\u011f\u0131daki kod \u00f6rne\u011finde, filtreleme i\u015fleminin nas\u0131l yap\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6rebilirsiniz:<\/p>\n<div class=\"code-container\">\n<pre><code>public List&lt;Document&gt; searchWithFilter(String query, String category) {\n    return this.vectorStore.similaritySearch(\n        SearchRequest.query(query)\n            .withTopK(3)\n            .withFilterExpression(\"category == '\" + category + \"'\")\n    );\n}<\/code><\/pre>\n<\/div>\n<p>Sonu\u00e7 olarak, sadece vekt\u00f6r aramas\u0131na g\u00fcvenmek yerine, geleneksel arama y\u00f6ntemleriyle vekt\u00f6r aramas\u0131n\u0131 birle\u015ftiren &#8220;Hybrid Search (Hibrit Arama)&#8221; modellerini de d\u00fc\u015f\u00fcnebiliriz. Bu y\u00f6ntem, hem kelime e\u015fle\u015fmelerinde hem de anlamsal sorgularda en y\u00fcksek do\u011frulu\u011fu elde etmemizi sa\u011flar. Spring Boot ve Spring AI&#8217;\u0131n sundu\u011fu bu esnek yap\u0131 sayesinde, kurumsal seviyedeki projelerinizi gelece\u011fe haz\u0131r hale getirebilirsiniz.<\/p>\n<h2>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<p>A\u015fa\u011f\u0131da, Spring Boot ile RAG ve vekt\u00f6r arama s\u00fcre\u00e7leri hakk\u0131nda en \u00e7ok merak edilen sorular\u0131 ve yan\u0131tlar\u0131n\u0131 bulabilirsiniz:<\/p>\n<ul>\n<li><strong>Spring AI hangi vekt\u00f6r veritabanlar\u0131n\u0131 destekliyor?<\/strong><br \/>Spring AI; PGvector, Milvus, Pinecone, Qdrant, Redis, Neo4j, Chroma ve Weaviate gibi sekt\u00f6rde pop\u00fcler olan neredeyse t\u00fcm vekt\u00f6r veritabanlar\u0131n\u0131 desteklemektedir.<\/li>\n<li><strong>RAG sistemlerinde veri g\u00fcvenli\u011fi nas\u0131l sa\u011flan\u0131r?<\/strong><br \/>Verileriniz kendi yerel veritaban\u0131n\u0131zda saklan\u0131r. Harici dil modellerine sadece kullan\u0131c\u0131n\u0131n sorusuyla e\u015fle\u015fen k\u00fc\u00e7\u00fck d\u00f6k\u00fcman par\u00e7alar\u0131 g\u00f6nderilir. Bu sayede t\u00fcm veritaban\u0131n\u0131z\u0131 d\u0131\u015far\u0131ya a\u00e7mam\u0131\u015f olursunuz.<\/li>\n<li><strong>Embedding \u00fcretimi i\u00e7in her zaman harici API&#8217;ler mi kullan\u0131lmal\u0131?<\/strong><br \/>Hay\u0131r, zorunlu de\u011fildir. Transformers k\u00fct\u00fcphaneleri veya yerel olarak bar\u0131nd\u0131rd\u0131\u011f\u0131n\u0131z (Ollama gibi) modeller arac\u0131l\u0131\u011f\u0131yla tamamen yerel (on-premise) embedding \u00fcretimi ger\u00e7ekle\u015ftirebilirsiniz.<\/li>\n<li><strong>Token maliyetlerini d\u00fc\u015f\u00fcrmek i\u00e7in ne yapmal\u0131y\u0131m?<\/strong><br \/>Etkin bir d\u00f6k\u00fcman par\u00e7alama stratejisi uygulamal\u0131, metaveri filtreleri kullanmal\u0131 ve dil modeline g\u00f6nderilen maksimum d\u00f6k\u00fcman say\u0131s\u0131n\u0131 (Top-K parametresini) optimize etmelisiniz.<\/li>\n<\/ul>\n<p>#Teknoloji #WebGeli\u015ftirme #SpringBoot #YapayZeka #RAG<\/p>\n<div class=\"github-example-link\"><strong>\u00d6rnek kod:<\/strong> <a href=\"https:\/\/github.com\/fatihsoysalcom\/simple-rag-vector-search-demo\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/fatihsoysalcom\/simple-rag-vector-search-demo<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"Spring Boot ve Spring AI kullanarak RAG (Retrieval-Augmented Generation) sistemlerini, vekt\u00f6r aramay\u0131 ve embedding i\u015flemlerini ad\u0131m ad\u0131m bu rehberle ke\u015ffedin.","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-42966","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Spring Boot ve RAG ile Ad\u0131m Ad\u0131m Vekt\u00f6r Arama (2026) - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring Boot ve RAG ile Ad\u0131m Ad\u0131m Vekt\u00f6r Arama (2026)\" \/>\n<meta property=\"og:description\" content=\"Spring Boot ve Spring AI kullanarak RAG (Retrieval-Augmented Generation) sistemlerini, vekt\u00f6r aramay\u0131 ve embedding i\u015flemlerini ad\u0131m ad\u0131m bu rehberle ke\u015ffedin.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-01T06:03:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-01T06:04:05+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Spring Boot ve RAG ile Ad\u0131m Ad\u0131m Vekt\u00f6r Arama (2026)\",\"datePublished\":\"2026-07-01T06:03:31+00:00\",\"dateModified\":\"2026-07-01T06:04:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/\"},\"wordCount\":2135,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/\",\"name\":\"Spring Boot ve RAG ile Ad\u0131m Ad\u0131m Vekt\u00f6r Arama (2026) - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-07-01T06:03:31+00:00\",\"dateModified\":\"2026-07-01T06:04:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Spring Boot ve RAG ile Ad\u0131m Ad\u0131m Vekt\u00f6r Arama (2026)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Spring Boot ve RAG ile Ad\u0131m Ad\u0131m Vekt\u00f6r Arama (2026) - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/","og_locale":"tr_TR","og_type":"article","og_title":"Spring Boot ve RAG ile Ad\u0131m Ad\u0131m Vekt\u00f6r Arama (2026)","og_description":"Spring Boot ve Spring AI kullanarak RAG (Retrieval-Augmented Generation) sistemlerini, vekt\u00f6r aramay\u0131 ve embedding i\u015flemlerini ad\u0131m ad\u0131m bu rehberle ke\u015ffedin.","og_url":"https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-07-01T06:03:31+00:00","article_modified_time":"2026-07-01T06:04:05+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"12 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Spring Boot ve RAG ile Ad\u0131m Ad\u0131m Vekt\u00f6r Arama (2026)","datePublished":"2026-07-01T06:03:31+00:00","dateModified":"2026-07-01T06:04:05+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/"},"wordCount":2135,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/","url":"https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/","name":"Spring Boot ve RAG ile Ad\u0131m Ad\u0131m Vekt\u00f6r Arama (2026) - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-07-01T06:03:31+00:00","dateModified":"2026-07-01T06:04:05+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/spring-boot-ve-rag-ile-adim-adim-vektor-arama-2026\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Spring Boot ve RAG ile Ad\u0131m Ad\u0131m Vekt\u00f6r Arama (2026)"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/42966","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=42966"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/42966\/revisions"}],"predecessor-version":[{"id":42967,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/42966\/revisions\/42967"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=42966"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=42966"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=42966"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}