Rehberler

Uygulamanıza Arama Nasıl Eklenir: Basit Filtrelerden Tam Metin Aramaya

Uygulamanıza arama eklemek için en basit çalışan şeyle başlayın: sunucu rotasını çağıran bir arama kutusu; bu rota, sorguyu birkaç sütunla eşleştirerek veritabanı satırlarını filtreler ve kategori veya fiyat gibi şeyler için filtreler ekler. Bu yeterli olmadığında — alaka sıralamasına, kelime köklerine veya çok sayıda kayda ihtiyacınız olduğunda — veritabanınızın tam metin aramasına geçin; yalnızca güçlü yazım hatası toleransına veya çok büyük verilerde anlık sonuçlara ihtiyacınız varsa barındırılan bir arama motoruna geçmeyi düşünün. Hangisini seçerseniz seçin, arama izinlere saygı göstermelidir: kullanıcılar izin verilmeyen kayıtları asla bulmamalıdır.

Uygulamanız için "arama" ne anlama gelir

Arama birkaç farklı şeyi kapsar ve çoğu uygulama birden fazlasına ihtiyaç duyar:

  • Anahtar kelime araması: bir metin kutusu — "'bahçe' geçen ilanları bul".
  • Filtreler: yapılandırılmış seçenekler — kategori, şehir, fiyat aralığı, tarih, durum.
  • Sıralama: en yeni, en ucuz, en alakalı.
  • Otomatik tamamlama: yazarken öneriler.
  • Yazım hatası toleransı: "restuarant" yine de "restaurant" bulur.

Bir dizin, iş ilanı sitesi veya mağaza için filtreler çoğu zaman metin kutusundan daha önemlidir. Bir araç seçmeden önce gerçekten hangilerine ihtiyacınız olduğuna karar verin.

Seçenekleriniz

YaklaşımNasıl çalışırUygun olduğu durumSınırlar
Tarayıcıda filtrelemeListeyi yükleyin, JavaScript ile filtreleyinKüçük herkese açık listeler (birkaç yüz öğe)Tüm verileri her ziyaretçiye gönderir; büyük listelerde yavaştır
Veritabanı desen eşleştirmesiSunucu sorgusu, "ad şunu içerir", büyük/küçük harf duyarsızKüçük ve orta ölçekli uygulamalar, yönetim araçlarıSıralama yok; büyük tablolarda yavaşlayabilir; kök bulma yok
Veritabanı tam metin aramasıPostgres kelimeleri dizinler ve eşleşmeleri sıralarÇoğu içerik ağırlıklı uygulamaBulanık eşleştirme eklenmezse yazım hatalarına karşı zayıftır
Bulanık eşleştirme (üçlü)Postgres karakter dizilerinin benzerliğini karşılaştırırİsimler, kısa alanlar, yazım hatası toleransıBir uzantı ve dizin gerektirir; ayarlama gerektirir
Barındırılan arama motoruAyrı bir servis verilerinizi dizinler (Algolia, Meilisearch, Typesense, Elasticsearch ve diğerleri)Büyük kataloglar, anlık arama, güçlü yazım hatası toleransıSenkronize tutulacak, ödenecek ve güvence altına alınacak bir servis daha

Verileriniz zaten Postgres'te duruyorsa, onun yerleşik tam metin araması güçlü bir orta yoldur. Metni kelimelere ayırır, kelimeleri köklerine indirger (böylece "running" "run" ile eşleşir), yaygın kelimeleri yok sayar ve sonuçları eşleşmenin ne kadar iyi olduğuna göre sıralayabilir. Doğru dizinle büyük tablolarda da hızlı kalır.

Örnek istemler

Basit bir başlangıç:

İlanlar sayfasına bir arama kutusu ve filtreler ekle. Arama, sorguyu başlık ve açıklama ile büyük/küçük harf duyarsız eşleştirsin. Filtreler: kategori (açılır liste), şehir (açılır liste) ve en yüksek fiyat. Aramayı sunucuda, sayfalı bir API rotasıyla yap; sayfa başına 20 sonuç. Arama ve filtre durumunu URL'de tut, böylece sonuçlar paylaşılabilir ve geri tuşu çalışır. Hiçbir şey eşleşmediğinde nazik bir boş durum göster.

Tam metin aramaya yükseltme:

İlan aramasını başlık (daha yüksek ağırlıklı) ve açıklama üzerinde Postgres tam metin aramasına geçir. Doğru dizini ekle, sonuçları alakaya göre sırala ve mevcut filtreleri ve sayfalamayı koru. Mevcut verilerde hiçbir değişiklik yapma.

İsimler için yazım hatası toleransı eklemek:

İşletme adında bulanık eşleştirme ekle, böylece küçük yazım hataları yine sonuç bulsun. Mümkünse üçlü benzerliği kullan, bir dizinle; yoksa mevcut aramaya geri dön.

Adım adım

  1. Kullanıcıların neyi aradığını listeleyin. Hangi alanlar (başlık, açıklama, etiketler, ad)? Hangi filtreler? Mümkünse birkaç gerçek kullanıcıya sorun.
  2. Sunucu tarafında başlayın. Sorguyu ve filtreleri alan, tek bir sayfa sonuç döndüren bir API rotası ekleyin. Tüm veriyi tarayıcıya yüklemeyin.
  3. İzinleri sorguda uygulayın. Kullanıcılar yalnızca kendi kayıtlarını veya yalnızca yayınlananları görüyorsa, bu koşul aramayla aynı sorguda olmalıdır.
  4. İlk günden sayfalama ekleyin — sayfa numaraları veya "daha fazla yükle".
  5. Arama durumunu URL'ye koyun (ör. ?q=garden&city=leeds). Paylaşılabilir bağlantılar, çalışan geri tuşu ve arama motorlarının filtrelenmiş sayfaları taraması — istediğinizde.
  6. Yazarken aramayı geciktirin (debounce). Yazmayı bıraktıktan sonra birkaç yüz milisaniye bekleyin; her tuş vuruşunda istek göndermeyin.
  7. Arama ve filtre yaptığınız sütunları bildiğinizde dizinler ekleyin.
  8. Yükseltin: önce tam metin, sonra bulanık eşleştirme, sonra barındırılan motor — yalnızca daha basit adım gerçek kullanıcılarda yetmediğinde.
  9. Gerçekçi verilerle test edin: yüzlerce veya binlerce satır, tuhaf karakterler, boş sorgular, çok uzun sorgular, desteklediğiniz diğer diller.

Sık yapılan hatalar

  • Tüm tabloyu tarayıcıya yüklemek. 50 öğe için sorun değildir; 50.000 için acı verici olur ve kullanıcının görmemesi gereken her kaydı da ortaya çıkarır.
  • İzinleri yok sayan arama. Arama yaygın bir sızıntı kaynağıdır: arama sorgusu "yalnızca benim" veya "yalnızca yayınlanmış" koşulunu unutursa özel veya taslak bir kayıt görünür.
  • Ham kullanıcı girdisinden SQL oluşturmak. Her zaman parametreli sorgular kullanın. Bir yapay zekâ oluşturucu genellikle bunu yapar, ama dizelerin birbirine yapıştırıldığını görürseniz kontrol edin.
  • Boş durum olmaması. "Sonuç yok" mesajı, bir öneriyle (filtreleri temizleyin, yazımı kontrol edin) birlikte insanların ayrılmasını önler.
  • Dizin olmaması. Arama, test verileriyle iyi görünür ve gerçek veriler büyüdükçe yavaşlar.
  • Doğrudan bir arama servisine atlamak. O zaman verinizin ikinci bir kopyasını senkronize tutmanız, silmeleri yönetmeniz ve başka bir anahtar setini güvence altına almanız gerekir — çoğu zaman görünür bir kazanç olmadan.
  • Mobili unutmak. Filtrelerin telefona sığması gerekir; yan panel yerine bir filtre çekmecesi veya daraltılabilir bir panel genellikle daha iyi çalışır.

Kontrol listesi

  • Hangi alanların aranacağını ve hangi filtrelerin olacağını biliyorsunuz
  • Arama sunucuda çalışır ve sayfalı sonuçlar döndürür
  • Sorgu, uygulamanın geri kalanıyla aynı izinleri zorunlu kılar
  • Kullanıcı girdisi parametre olarak geçirilir, asla SQL'e yapıştırılmaz
  • Arama durumu URL'de tutulur
  • Yazma geciktirilir (debounce)
  • Aranan ve filtrelenen sütunlar dizinlenmiş
  • Boş, sonuçsuz ve hata durumları nettir
  • Gerçekçi veri hacimleri ve dağınık girdilerle test edildi

Mythex ile arama ekleme

Mythex üzerinde oluşturulan bir uygulamada veriler genellikle projenin kendi Postgres veritabanında tutulur; bu yüzden yukarıdaki istemlerle başlayabilirsiniz: önce desen eşleştirme, sıralamaya ihtiyacınız olduğunda Postgres tam metin araması. Barındırılan bir arama motoru istiyorsanız, kendi hesabınızı ve anahtarınızı getirin, bunu bir proje sırrı olarak saklayın ve agent'tan sunucudan dizinlemesini ve sorgulamasını isteyin; Herhangi bir API'yi entegre et bölümünde anlatıldığı gibi.

Arama birçok uygulamanın merkezindedir: dizin sitesi nasıl oluşturulur, iş ilanı sitesi nasıl oluşturulur ve pazar yeri nasıl oluşturulur rehberleri, aramanın ürünün geri kalanına nasıl uyduğunu gösterir.

Sorular

Bir uygulamaya arama eklemenin en kolay yolu nedir?

Verileriniz bir veritabanındaysa, birkaç sütunda büyük/küçük harf duyarsız eşleşme yaparak satırları filtreleyen bir sunucu rotası en kolay başlangıçtır. Tarayıcıda zaten yüklü küçük bir liste için tarayıcıda filtrelemek daha da basittir.

Arama için Algolia veya Elasticsearch'e ihtiyacım var mı?

Genellikle ilk aşamada hayır. Postgres tam metin araması, kelime eşleştirmeyi, sıralamayı ve binlerce ila milyonlarca satırı iyi yönetir. Barındırılan bir arama motoru, güçlü yazım hatası toleransına, büyük verilerde yazarken anında sonuçlara veya gelişmiş alaka ayarına ihtiyaç duyduğunuzda değerlidir.

Aramam neden yazım hatalarıyla sonuç bulamıyor?

Temel eşleştirme ve standart tam metin araması kelimeleri yazıldığı gibi (ya da köklerini) arar; bu yüzden bir yazım hatası eşleşmez. Bulanık eşleştirmeye ihtiyacınız var; örneğin Postgres'te üçlü (trigram) benzerliği veya yazım hatalarına toleranslı bir arama motoru.

Arama tarayıcıda mı yoksa sunucuda mı çalışmalı?

Küçük bir herkese açık liste dışındaki her şey için sunucuda. Sunucu tarafı arama ölçeklenir, izinlere saygı gösterir ve tüm veri kümenizi her ziyaretçiye göndermez.

Mythex · Pricing · Yapay zekayla her şeyi yapın · Web sitesi ve uygulama şablonları · Mythex karşılaştırmaları · Yapay zekayla uygulama geliştirme sözlüğü · Yapay zekayla uygulama geliştirme için ücretsiz araçlar · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)