• 02-04-2019, 15:50:29
    #1
    Merhaba,
    Bir şirket projemde kayıt ekleme esnasında jquery ajax ile her onkeyup oluşta db den değeri kontrol ettirip lambda da contains komutu kullanarak tek bir değer dönderiyorum. ve eğer varsa ekrana yazdırıyor.
    Sorunuma gelince
    Kulanıcı "ahmetin projesi" diye arattırırsa ahmet içeren ilk kayıdı alabiliyorum.
    fakat kullanıcı "ahmt projesi" yazınca bu kayıtları listeleyemiyorum.
    Bunun için javascript ile girilen değerdeki kelimeyi sistemdeki dilin kütüphanesine göre düzeltip göndermek istiyorum, fakat bununla ilgili bir bilgi bulamadım.
    Yardımcı olursanız sevinirim.
  • 03-04-2019, 02:20:54
    #2
    Hocam söylediğinizi yapmak zannımca çok zor. Siz söz düzeltmesini kastediyorsunuz ki (google did you mean?) a döner olay.

    Bu hem çok zahmetli hem de sistem (DB) için yorucu olur.
    Bunu sizin DB nizi yedekleyip yapan ücretli search firmaları var.

    https://www.algolia.com/ gibi.

    Bana kalırsa Autosearch bir script yazsanız işin içinden çıkarsınız.

    Yani:

    "ahmetin projesi" ile bire bir eşleşme yerine "ah" yazdığı anda bir istek gönderirsiniz uygun sonuçlar çoklu seçenek olarak döner.

    Şunun gibi:
    ahmetin projesi
    vahdettinin projesi

    her yeni bir girişte listeyi yenilersiniz. "ahm" yazınca vahdettin kaybolur. "ahmt" yazarsa hiç bir sonuç gelmez.

    klavye eventine de bir debounce işlevi atarsanız hızlı hızlı yazılınca istekte bulunmaz en son yazdığının üstünden biraz (250ms 350ms vb.) geçince veri çeker, olur biter.
  • 03-04-2019, 09:53:34
    #3
    Cevabınız için teşekür ederim.
    public JsonResult ProblemKontrolu(string kelime)
    {
    string deger = kelime.Replace(" ", "");
    char[] degerharf = deger.ToCharArray();

    string isd="";

    int say = 0;//her bir itemin toplan eşleşen harf sayısı

    int k = 0;//her item benzerlik sayısı
    var veriler = db.Problemler.Select(s=>s).ToList();
    int[] benzerliksay = new int[veriler.Count()];
    //////benzerlik oranı hesapla----------------------------------------------------
    ///
    int benzerlikOrani = (kelime.Length) - ((kelime.Length)*40/100);

    //----------------------------------------------------------------------------------

    foreach (var item in veriler)
    {
    say = 0;

    char[] metin = item.ProblemTanimi.ToString().ToCharArray();

    for (int i = 0; i < metin.Length; i++)
    {
    for (int j = 0; j < degerharf.Length; j++)
    {
    if (degerharf[j]==metin[i])
    {
    say += 1;
    break;
    }

    }

    }
    if (say >= benzerlikOrani)
    {
    isd = item.ProblemTanimi.ToString();
    break;
    }
    k += 1;

    }

    return Json(isd);

    şeklinde verileri ajax ile her onkeyup yaptığında gönderen bir fonksiyon yazdım. şimdilik benzerlik ile sorgulayıp break ile kesiyor ve geriye tek kayıt dönderip texbox altında eşleşen kayıt diye gösteriyor. fakat db yi biraz dediğiniz gibi yorar.
    bunu dahada geliştirmeye çalışacağım sizce daha mantıklı birşeyler yapılabilirmi?
  • 03-04-2019, 20:43:09
    #4
    Hocam bana kalırsa şöyle yapsanız daha mantıklı olur.

    Alıntı
    var KEY = "Ahmet";
    var projeler = "Ahmetin projesi";
    var sorgu = projeler.indexOf(KEY);
    // sonuç: 0 olacaktır.
    // sonuç: -1 olursa eşleşme yok demektir.
    // sonuç: 0 ve üzeri olursa eşleşme bulundu demektir. (rakam bulunduğu konumu ifade eder örn: 5 ise 5 karakter sonra )