herkese merhaba & kolay gelsin..
Firebird 1.5 ve FIBPlus 6.2 kullanıyorum,
veri tabanında ve connectionda charset WIN1254 ve collate pxw_turk ayarlarına dikkat ediyorum..
'containing' keywordu ile yazılan sql ile İ,ı sorun olmadan buluyor oki,
fakat locate fonksiyonuna locaseinsensitive parametresi versek de yemiyo;
burdaki sorun locate fonksiyonun sourceunda sanırım, FIBDataset in source unu düzenlemek şeklinde bi çözümü var mı?
yoksa illa da locatele yapcam dersek tek çözümü, verilerin büyük harfle kaydını sağlayıp, locate için de a i->İ dönüşümünü manual yapıp aynı formatta aramasını sağlamak mıdır..
(bu konu çok geçmiş, search yaptım:) , sadece componente bağlı farklı bi çözümü olabilir mi diye sormak istedim..)
FIBPlus locate fonksiyonu..
hadi locate'i boşver diyip ibexpertteki deneyimlerim:
select * from table1 where ad like '%ali%'
-> ali'yi buluyo fakat ALİ yi bulamıyo
select * from table1 where ad like '%ALİ%'
-> ALİ yi buluyo ali'yi bulamıyo
ama çok enteresan
select * from table1 where ad containing 'ali'
-> hem büyük küçük demeden arıyo hem de i nin İ ye, I nın ı ya eşit
olduğunu anlıyo.. ama tabi bu sorgu ile sadece aliler diil 'halil' filan gibi
içinde ali geçen kayıtlarda geliyo
select * from ogrenci where ad like upper('ali')
-> upper(ali) = ALI olduğundan bulamıyo
son olarak..
select * from table1 where upper(ad collate pxw_Turk) like upper('ali' collate pxw_Turk)
-> büyük küçük eşitini buluyo, artık isteğe bağlı olarak tam kelime ya da
% ile içeren kelimeleri buluyosunuz
bu sorgu db 'i ne kadar kasar bi fikrim yok?
select * from table1 where ad like '%ali%'
-> ali'yi buluyo fakat ALİ yi bulamıyo
select * from table1 where ad like '%ALİ%'
-> ALİ yi buluyo ali'yi bulamıyo
ama çok enteresan
select * from table1 where ad containing 'ali'
-> hem büyük küçük demeden arıyo hem de i nin İ ye, I nın ı ya eşit
olduğunu anlıyo.. ama tabi bu sorgu ile sadece aliler diil 'halil' filan gibi
içinde ali geçen kayıtlarda geliyo
select * from ogrenci where ad like upper('ali')
-> upper(ali) = ALI olduğundan bulamıyo
son olarak..
select * from table1 where upper(ad collate pxw_Turk) like upper('ali' collate pxw_Turk)
-> büyük küçük eşitini buluyo, artık isteğe bağlı olarak tam kelime ya da
% ile içeren kelimeleri buluyosunuz
bu sorgu db 'i ne kadar kasar bi fikrim yok?
collate pxw_Turk) nin kasacağını sanmıyorum. zatn LIKE ta index kullanılmaz ilk kayıt son kayıda doğru tek tek kayıtlar kotrol edilir. bu yüzden performans minimumlarda. Emin değilim ama mantık yürütüncede index kullanmadığı içinde ayrıca belirtmediğin sürce collate pxw_Turk işlenmiyor.
kolay gele
kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Selamlar,
Şu anda FB'de Full-Text Search işiyle uğraşıyorum.
Hız konusunda fazla endişe etmeyin. Bende yaklaşık 80,000 kayıtlık, ki kayıtların içinde 1 Sayfa ile 50 sayfa civarına kadar çıkan bir BLOB alan'lı bir DB var ve üzerinde çalışıyorum. CONTAINING ile aradığımda 20-35 saniye arasında kontrol ediyor ve kayıtları getiriyor.
Aynı sorgu Advantage'da hiçbir zaman 30 saniyenin altına inmedi. Ayrıca EXACT match yapıp (KESİN BİREBİR EŞLEMELİ) arama yapıyor.
LIKE ile. LIKE Case Sensitive (Büyük/Küçük Harf Duyarlı) çalışır. CONTAINING duyarsız çalışır.
Aynı sorguyu ben LIKE verdiğimde 9-15 saniye arası bir performansla bulup getiriyor.
Yani performansı LIKE'da süper. Bir not daha Hem LIKE hem de CONTAINING Index'siz çalışır. Natural Order ile
Jetgillerin DB'si FB
Kolay Gelsin
Şu anda FB'de Full-Text Search işiyle uğraşıyorum.
Hız konusunda fazla endişe etmeyin. Bende yaklaşık 80,000 kayıtlık, ki kayıtların içinde 1 Sayfa ile 50 sayfa civarına kadar çıkan bir BLOB alan'lı bir DB var ve üzerinde çalışıyorum. CONTAINING ile aradığımda 20-35 saniye arasında kontrol ediyor ve kayıtları getiriyor.
Aynı sorgu Advantage'da hiçbir zaman 30 saniyenin altına inmedi. Ayrıca EXACT match yapıp (KESİN BİREBİR EŞLEMELİ) arama yapıyor.
LIKE ile. LIKE Case Sensitive (Büyük/Küçük Harf Duyarlı) çalışır. CONTAINING duyarsız çalışır.
Aynı sorguyu ben LIKE verdiğimde 9-15 saniye arası bir performansla bulup getiriyor.
Yani performansı LIKE'da süper. Bir not daha Hem LIKE hem de CONTAINING Index'siz çalışır. Natural Order ile

Jetgillerin DB'si FB

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim: