Mevzuat Anlamlı Arama
/api/v1/library/semantic
Mevzuat Anlamlı Arama
Cümle veya soru bazlı, niyet temelli mevzuat aramasıdır. Anahtar kelime eşleşmesi yerine vektör benzerliği + tam metin füzyonu kullanır; bu nedenle "müşteri şikayetlerinin yönetim süreci" gibi günlük dilde ifadelere doğal yanıt verir.
Hibrit boru hattı
- Sorgu, çok dilli Qwen3-Embedding-8B modeliyle 4096 boyutlu vektöre çevrilir (sorgu tarafında modelin instruct ön-eki uygulanır)
- Qdrant (vektör) + Postgres FTS (anahtar kelime) paralel olarak çalışır — her biri top-K =
max(50, take*3)döner - Sonuçlar RRF (Reciprocal Rank Fusion, k=60) ile birleştirilir
- Re-ranking: başlıkta sorgu kelimesi geçen sonuçlara
+0.05, aktif filtreyle eşleşen etiket başına+0.10ek puan eklenir
Filtreler tercih sinyalidir
institutionType, topic, department parametreleri eleme yapmaz — sadece sıralamada öne çekme/aşağı itme sinyali olarak kullanılır. Yani filtreyle eşleşmeyen sonuçlar yine listelenir, daha alta düşer. Bu davranış, anlamlı arama sonuçlarının çok dar bir filtre yüzünden tamamen kaybolmasını engeller.
/library (anahtar kelime) ile farkını burada vurgulamak gerek: orada filtreler sert filtredir; burada yumuşak sinyaldir.
Ancak bu yumuşaklık yalnızca institutionType / topic / department için geçerlidir. Uç nokta, geri getirmeden sonra iki sert eleme uygular: mülga mevzuatı koşulsuz eler (/library'deki legalStatus=all karşılığı burada yoktur) ve aynı kanunun farklı kaynaklardaki nüshalarını tek satıra indirir. Bu nedenle bir sayfa pageSize'dan az sonuç içerebilir; pagination.totalCount eleme öncesi sayıdır.
Hata ve hata ayıklama
search parametresi boş veya eksik gönderilirse uç nokta 400 VALIDATION_ERROR döner.
İsteğe X-Regvion-Debug-Search: 1 başlığını eklerseniz her sonuç ayrıca bir debug nesnesi taşır: semantic, keyword, titleBoost, tagBoost ve rrfRank. Başlık gönderilmezse bu alan null döner.
Sayfalama ve top-K sınırı
pageSize1-50 arası (varsayılan 12)- Toplam top-K = 100 ile sınırlıdır; bunun ötesi sıralama gürültüsüdür
pagination.truncated = truedöndüğünde, sınır aşıldığı için daha fazla sayfa istemenin manası yoktur
/library ile karşılaştırma
| Özellik | /library (anahtar kelime) |
/library/semantic (anlamlı) |
|---|---|---|
| Sorgu yapısı | Token bazlı | Cümle/soru bazlı |
| Filtre davranışı | Sert (eler) | Etiket filtreleri yumuşak (sinyal); mülga elemesi ve nüsha daraltması serttir |
| Eşleşme | Postgres FTS (Türkçe kök + aksan duyarsız) + başlıkta ILIKE yedeği | Vektör benzerliği + FTS füzyonu (RRF) |
pageSize üst sınırı |
100 | 50 |
| Sıralama | sort ile seçilir: date_desc / date_asc / title_asc / title_desc / relevance |
Sabit — relevance |
| Snippet | <b> highlight, FTS headline |
<b> highlight, kelime tabanlı |
obligationCount |
Gerçek yükümlülük sayısı | Her zaman 0 — bu uçta doldurulmaz; sayı için /library/{id}/obligations |
Listeleme veya filtreleme önceliğiniz varsa /library'yi, doğal dille soru sorduğunuzda /library/semantic'i tercih edin.
Aynı mevzuatın ikinci resmî nüshası (ikiz) listelerde ve sayımlarda yer almaz; detay ucu canonicalDocumentId ile sahibine işaret eder.
Paketler: isPackage ve matchedFile
Sonuçlar /library ile aynı paket alanlarını taşır: isPackage (sonuç bir zip paketi mi) ve matchedFile (sorgu sözcüklerinin hepsinin geçtiği tek paket dosyasının yolu; yoksa null). Kurallar için Mevzuat Kütüphanesi sayfasına bakın. Doğal dilde yazılmış uzun sorgularda bütün sözcüklerin tek bir dosyada geçmesi seyrek olduğundan matchedFile burada çoğunlukla null'dır.
Kredi bitince
Bu uç yapay zekâ kredisi kullanır. Kredi bittiğinde 402 CREDITS_EXHAUSTED döner; anahtar kelime uçları krediden bağımsızdır, aramanızı oradan sürdürebilirsiniz.
Parametreler
| İsim | Konum | Tip | Zorunlu | Açıklama |
|---|---|---|---|---|
search |
Query | string |
Evet | Arama cümlesi. |
institutionType |
Query | integer |
Hayır | Tercih sinyali — InstitutionType enum sayı değeri (1-24). Sonuçları dışlamaz, yeniden sıralar. |
topic |
Query | integer |
Hayır | Tercih sinyali — TopicType enum sayı değeri (1-25). |
department |
Query | integer |
Hayır | Tercih sinyali — DepartmentType enum sayı değeri (1-24). |
page |
Query | integer |
Hayır | Sayfa numarası. |
pageSize |
Query | integer |
Hayır | 1-50; varsayılan 12. |
X-Regvion-Debug-Search |
Header | string |
Hayır | '1' gönderildiğinde her sonuca skor kırılımı eklenir: debug = { semantic, keyword, titleBoost, tagBoost, rrfRank }. Gönderilmezse bu alan null döner. |