Factorizer/Cluster ERP WikiCluster ERP English
Ana sayfa / Platform

Referans

Arama, sayfalama ve toplu işlemler

Metin araması, tavanlı sayımlar, yeniden eskiye sayfalar ve toplu kullanımdan kaldırma için ortak çekirdek yardımcılar.

Cluster ERP'deki liste servisleri üç küçük çekirdek modülü paylaşır: metin araması için core/search.py, büyük tablolardaki sayımlar için core/pagination.py ve toplu kullanımdan kaldırma için core/bulk_operations.py. Bu sayfa işlevlerini ve sabitlerini listeler. Liste rotalarının sunduğu HTTP parametreleri API kuralları sayfasında belgelenir.

Kapsam ve kaynak

  • Tanımlandığı yer: src/cluster_erp/core/search.py, src/cluster_erp/core/pagination.py, src/cluster_erp/core/bulk_operations.py
  • Sayı: search.py içinde 7 genel işlev ve 2 sabit; pagination.py içinde 3 işlev ve 1 sabit; bulk_operations.py içinde 2 işlev ve 2 şema (dosyalardan okundu). Aşağıdaki kullanım sayıları, tanımlayan dosya hariç src/cluster_erp ve migrations üzerinde grep -rlw <name> ile yapıldı.

Metin araması

Modül belge dizgisi çözdüğü iki sorunu belirtir: kullanıcının yazdığı % ve _ karakterleri LIKE içinde değişmez olmalıdır ve veritabanı harmanlaması yalnızca ASCII harfleri katlar; bu yüzden büyük harfli ASCII dışı arama terimleri eşleşmiyordu (src/cluster_erp/core/search.py:1-33).

Ad Tür Davranış Kullananlar Kaynak
escape_like(term) işlev Kaçış karakterini, % ve _ karakterlerini kaçışlar text_match kullanır src/cluster_erp/core/search.py:58-65
NORMALIZED_SQL sabit Eşleşen dizinleri kuran göçler için normalleştirilmiş ifadenin SQL metni 3 dosya src/cluster_erp/core/search.py:76-82
normalized(expr) işlev translate(lower(expr COLLATE "und-x-icu"),...): ICU ile Unicode küçük harf ve noktalı ile noktasız i biçimlerinin i'ye katlanması text_match kullanır src/cluster_erp/core/search.py:85-88
text_match(column, term) işlev normalized(column) LIKE %normalized(escaped term)% 69 dosya src/cluster_erp/core/search.py:91-97
fold(value) işlev Sorgudan sonra süzülen listeler için Python'da aynı normalleştirme text_contains kullanır src/cluster_erp/core/search.py:100-111
text_contains(haystack, term) işlev fold ile Python tarafında alt dizgi eşleşmesi 1 dosya src/cluster_erp/core/search.py:114-118
FENCE_MAX_MATCHES sabit 20.000; üstünde bir arama sayfası yenilik dizininde yürür recency_page kullanır src/cluster_erp/core/search.py:143
execute_page(session, stmt, force_index_walk) işlev Bir sayfa sorgusunu çalıştırır; isteğe bağlı olarak işlem süresince bitmap taramalarını kapatır 3 dosya src/cluster_erp/core/search.py:146-161
recency_page(base, entity, order_attr,...) işlev En yeniden eskiye bir sayfa kurar; arama varsa ve tavanlanmamış eşleşme en fazla FENCE_MAX_MATCHES ise önce maddileştirilmiş bir CTE üzerinden süzer 3 dosya src/cluster_erp/core/search.py:164-195

Belge dizgisi aksan katlamanın bilerek yapılmadığını belirtir: unaccent eklentisi kurulu değildir ve aksanları yok saymak bazı dillerde ayrı harfleri birleştirir (src/cluster_erp/core/search.py:31-33). Katlamanın sabitleri bağlı parametre olarak değil SQL metnine gömülü gider; böylece ifade, aynı ifade üzerine kurulmuş bir dizinle eşleşir (src/cluster_erp/core/search.py:68-74).

Tavanlı sayımlar

Ad Tür Davranış Kullananlar Kaynak
DEFAULT_COUNT_CAP sabit 10.000 yok src/cluster_erp/core/pagination.py:23
configure(cap) işlev Açılışta list_count_cap değerinden süreç geneli tavanı kurar; 0 tam sayım demektir create_app çağırır src/cluster_erp/core/pagination.py:27-30, src/cluster_erp/server/app.py:1311-1313
count_capped(session, base, cap=None, prefer_index=False) işlev En fazla cap + 1 satır sayar ve (total, capped) döndürür; prefer_index işlem süresince sıralı taramaları kapatır 14 dosya src/cluster_erp/core/pagination.py:33-69
capped_total(session, count_stmt, cap=None, prefer_index=False) işlev Var olan bir select(func.count(...)) ifadesi için aynısı 58 dosya src/cluster_erp/core/pagination.py:72-84

Belge dizgisi nedeni belirtir: milyonlarca satırlık bir tabloda tam count(*) yüzlerce milisaniye sürerken sayfanın kendisi bir milisaniyenin altındadır; bu yüzden sayfalayıcı "10 000+" gösterir (src/cluster_erp/core/pagination.py:1-13).

Toplu işlemler

Ad Tür Davranış Kaynak
BulkDeleteRequest şema ids: list[UUID] src/cluster_erp/core/bulk_operations.py:12-13
BulkDeleteResponse şema deleted_count: int src/cluster_erp/core/bulk_operations.py:16-17
bulk_soft_delete(session, model_class, ids, deleted_by=None) işlev Canlı satırları yükler ve her birinde ORM üzerinden deleted_at (ve deleted_by) ayarlar; sayıyı döndürür src/cluster_erp/core/bulk_operations.py:20-55
orm_delete_where(session, model_class, *where) işlev Eşleşen satırları ORM üzerinden fiziksel olarak siler ve flush eder; yalnızca alt satırlar için src/cluster_erp/core/bulk_operations.py:58-75

İki işlev de değişiklik geçmişi kancası her satırı kaydetsin diye ORM üzerinden gider (src/cluster_erp/core/bulk_operations.py:26-34, src/cluster_erp/core/bulk_operations.py:59-66). Bkz. yumuşak silme ve kullanımdan kaldırma.

Kısıtlar ve doğrulama

  • SET LOCAL ve RESET, planlayıcı ayarlarını yalnızca geçerli işlem için değiştirir (src/cluster_erp/core/pagination.py:60-66, src/cluster_erp/core/search.py:155-161).
  • recency_page, LIMIT ve OFFSET değerlerini yalnızca limit 0'dan büyükse uygular (src/cluster_erp/core/search.py:193-194).

Tanıtılan terimler

Terim Kod tanımlayıcısı Tanım Türkçe terim Kaynak
capped count count_capped Yapılandırılmış bir tavanda duran ve durduğunu bildiren satır sayımı. tavanlı sayım src/cluster_erp/core/pagination.py:33
text match text_match Büyük/küçük harf duyarsız, dilden bağımsız alt dizgi süzgeci. metin eşleşmesi src/cluster_erp/core/search.py:91

İlgili sayfalar


92f8051 numaralı commit ile 2026-11-13 tarihinde doğrulandı.

Doğrulanan commit 92f8051 · 2026-11-13