Użytkownik ma numer „567 890”, ale nie wie, czy dzwoniła firma z Warszawy, serwis z Poznania czy lokalny hydraulik. Wpisuje sześć cyfr w wyszukiwarkę i nie otrzymuje nic, mimo że pełny numer znajduje się w bazie. Problem zwykle nie leży w braku danych, lecz w sposobie ich zapisania i indeksowania.
Wyszukiwanie firmy po fragmencie numeru telefonu wymaga czegoś więcej niż dodania pola „telefon” do formularza. System musi rozpoznawać różne formaty tego samego numeru, ignorować spacje i prefiksy, a jednocześnie nie zwracać setek przypadkowych wyników. Dochodzą do tego numery wewnętrzne, infolinie współdzielone przez kilka placówek, stare wpisy oraz dane skopiowane z katalogów bez weryfikacji.
Dobrze zaprojektowana wyszukiwarka nie obiecuje identyfikacji każdego dzwoniącego. Pozwala natomiast szybko ustalić, czy podany ciąg cyfr występuje w publicznych danych konkretnej firmy i jak wiarygodne jest dopasowanie.
Najpierw ujednolicenie numerów, dopiero później wyszukiwanie
Najczęstszy błąd polega na przeszukiwaniu numeru dokładnie w takiej postaci, w jakiej został wpisany do bazy. Tymczasem ten sam polski numer może występować jako:
- 22 123 45 67,
- 221234567,
- +48 22 123 45 67,
- 0048 221 234 567,
- tel. 22-123-45-67,
- 22 123 45 67 wew. 104.
Dla człowieka są to warianty jednego numeru. Dla zwykłej bazy danych — różne ciągi znaków. Dlatego każdy rekord powinien mieć co najmniej dwie wersje telefonu:
- wartość prezentacyjną, np. „+48 22 123 45 67”;
- wartość znormalizowaną, np. „48221234567”.
Normalizacja powinna usuwać spacje, myślniki, nawiasy i opisy tekstowe. Trzeba też rozdzielić numer główny od numeru wewnętrznego. W przeciwnym razie zapytanie o końcówkę „104” może zwrócić firmę tylko dlatego, że taki numer ma jej dział księgowości.
Dla polskich numerów krajowych praktyczną zasadą jest przechowywanie dziewięciu cyfr numeru właściwego oraz osobno kodu kraju „48”. Nie należy jednak automatycznie dopisywać prefiksu +48 do każdego wpisu. W bazach firm działających transgranicznie mogą znajdować się telefony niemieckie, czeskie lub słowackie, a część numerów specjalnych nie odpowiada standardowemu schematowi numeru komórkowego albo stacjonarnego.
Przed zapisaniem numeru warto przeprowadzić cztery kontrole:
- Czy po oczyszczeniu pozostały wyłącznie cyfry?
- Czy długość numeru odpowiada obsługiwanemu planowi numeracji?
- Czy rozszerzenie wewnętrzne zostało zapisane w osobnym polu?
- Czy identyczny numer nie jest już przypisany do innej placówki lub podmiotu?
Ostatni punkt jest szczególnie ważny. Jeden numer może legalnie obsługiwać kilka oddziałów tej samej sieci, ale może też oznaczać duplikat, nieaktualną wizytówkę albo wpis utworzony przez pośrednika. Numer telefonu nie powinien być traktowany jako jednoznaczny identyfikator firmy.
Jak wyszukiwać fragment numeru bez przeciążania bazy
Najprostsze zapytanie typu LIKE '%567890%' działa w małej bazie, lecz słabo skaluje się wraz z liczbą rekordów. Znak % na początku wzorca często uniemożliwia użycie standardowego indeksu, więc silnik musi sprawdzić dużą część tabeli. Przy kilku tysiącach wpisów użytkownik może tego nie zauważyć. Przy setkach tysięcy rekordów opóźnienie staje się wyraźne, zwłaszcza gdy każde naciśnięcie klawisza uruchamia nowe zapytanie.
Rozsądne minimum to rozpoczęcie wyszukiwania dopiero po podaniu co najmniej pięciu lub sześciu cyfr. Krótszy fragment daje za dużo przypadkowych dopasowań. Ciąg „123” może wystąpić w tysiącach numerów, przez co wyniki będą mało użyteczne, a zapytania kosztowne.
Praktyczna hierarchia dopasowań wygląda następująco:
- pełny numer — najwyższa pozycja;
- zgodność ostatnich dziewięciu cyfr — bardzo mocne dopasowanie;
- zgodność końcowych sześciu–ośmiu cyfr — dopasowanie prawdopodobne;
- fragment znajdujący się w środku numeru — dopasowanie pomocnicze;
- mniej niż pięć cyfr — brak wyszukiwania albo komunikat o zbyt krótkim zapytaniu.
Końcówka numeru ma zwykle większą wartość niż jego początek. Użytkownik może nie znać prefiksu kraju albo numeru kierunkowego, ale zazwyczaj widzi końcowe cyfry w historii połączeń. Z tego powodu część systemów przechowuje dodatkowo numer odwrócony. Dla wartości „48221234567” zapis odwrócony ma postać „76543212284”. Wyszukiwanie po końcówce można wtedy technicznie zamienić na wyszukiwanie po początku pola, które łatwiej obsłużyć zwykłym indeksem.
W PostgreSQL dobrą alternatywą jest indeks trigramowy dla znormalizowanego numeru. W Elasticsearch lub OpenSearch można zastosować n-gramy, ale trzeba ograniczyć ich długość. Generowanie wszystkich fragmentów od jednej cyfry szybko powiększa indeks i produkuje szum. Sensowny zakres dla telefonów to zwykle n-gramy o długości od pięciu do dziewięciu znaków.
Interfejs powinien również ograniczać liczbę zapytań. Opóźnienie 250–400 ms po zakończeniu pisania zwykle wystarcza, aby nie wysyłać osobnego żądania po każdej cyfrze. Warto też ustawić limit, np. 20 wyników na pierwszej stronie, oraz sortować firmy według jakości dopasowania, aktualności danych i kompletności profilu.
Najbardziej irytujący błąd z punktu widzenia użytkownika to sytuacja, w której wyszukiwarka pokazuje kilkadziesiąt firm, ale nie wyjaśnia dlaczego. Przy każdym wyniku należy oznaczyć dopasowanie, np. „zgodność pełnego numeru”, „zgodność ostatnich 7 cyfr” albo „numer występuje w danych oddziału”. Bez tego lista wygląda przypadkowo i trudno jej zaufać.
Dane firmy muszą być aktualne, rozdzielone i możliwe do zweryfikowania
Nawet najlepszy indeks nie pomoże, gdy baza zawiera numer sprzed pięciu lat. Telefony są przenoszone między operatorami, ponownie przydzielane i zmieniane po reorganizacji firmy. Mały zakład usługowy może przestać używać numeru, który po pewnym czasie trafi do zupełnie innego abonenta. Sam fakt występowania telefonu w dawnym katalogu nie potwierdza więc, że numer nadal należy do wskazanego przedsiębiorcy.
Każdy numer powinien mieć zapisane przynajmniej:
- datę dodania,
- datę ostatniej weryfikacji,
- źródło pozyskania,
- status: aktywny, niepotwierdzony, nieaktualny lub usunięty,
- rodzaj: główny, oddziałowy, infolinia, komórkowy, techniczny,
- identyfikator firmy albo konkretnej placówki.
W praktyce numer centrali należy przypisywać do przedsiębiorstwa, a lokalny telefon — do oddziału. Łączenie wszystkiego w jednym polu prowadzi do absurdalnych wyników: użytkownik szuka restauracji w Krakowie, a trafia na centralę franczyzodawcy w Warszawie.
Dane warto sprawdzać w regularnym cyklu. Dla aktywnie zarządzanych profili rozsądny jest przegląd co 6–12 miesięcy. Wpisy niepotwierdzone przez właściciela firmy powinny być oznaczane wyraźnie, a po wykryciu rozbieżności kierowane do ponownej weryfikacji. Automatyczny test, czy numer odbiera połączenia, nie potwierdza jeszcze właściciela telefonu. Potwierdza jedynie, że numer jest aktywny.
Trzeba również odróżnić wyszukiwanie danych publicznej firmy od tworzenia odwrotnej książki telefonicznej osób prywatnych. Numer przypisany do jednoosobowej działalności może być jednocześnie numerem osobistym przedsiębiorcy. Publikacja, indeksowanie i prezentowanie takich danych wymagają określonego celu, kontroli źródła oraz procedury poprawiania i usuwania wpisów. Nie należy pokazywać pełnego numeru w wynikach tylko dlatego, że użytkownik wpisał jego krótki fragment. Bezpieczniej ujawnić pełną wartość dopiero przy mocnym dopasowaniu albo zamaskować część cyfr, np. „*** *** 567”.
Znaczenie ma także spójność nazwy, adresu i telefonu. Katalog zawierający sam numer niewiele mówi o jakości rekordu. Dopiero połączenie danych NAP — name, address, phone pozwala ocenić, czy wynik dotyczy właściwej firmy, jej oddziału i aktualnej lokalizacji. Dodatkowe informacje na: wizytówki NAP – poadresie.pl.
Pierwszą rzeczą do poprawienia nie jest wygląd formularza, lecz normalizacja numerów w bazie. Należy utworzyć osobne pole zawierające wyłącznie cyfry, odseparować numery wewnętrzne i sprawdzić duplikaty. Dopiero na tak przygotowanych danych warto uruchomić wyszukiwanie fragmentów oraz ustawić minimalną długość zapytania na pięć lub sześć cyfr.
FAQ
Czy wystarczą cztery cyfry, aby znaleźć firmę?
Technicznie można wykonać takie wyszukiwanie, ale wyniki będą zwykle zbyt szerokie. Rozsądne minimum to pięć cyfr, a wyraźnie lepszą precyzję daje sześć–osiem cyfr.
Czy trzeba wpisywać +48?
Nie, jeżeli system normalizuje numery i potrafi porównywać zarówno pełny zapis międzynarodowy, jak i dziewięć cyfr numeru krajowego. Prefiks powinien jednak zwiększać pewność dopasowania przy bazie obejmującej kilka państw.
Czy jeden numer może należeć do kilku firm?
Może obsługiwać kilka oddziałów, marek należących do jednej grupy albo klientów biura wirtualnego. Taki wynik wymaga dodatkowego porównania nazwy, adresu i źródła danych.
Czy wyszukiwarka może gwarantować, że numer nadal należy do wskazanej firmy?
Nie. Może pokazać, że numer występuje w określonym, możliwie aktualnym źródle. Pewność zwiększa data weryfikacji, zgodność kilku źródeł oraz potwierdzenie przez właściciela profilu.
Czy należy pokazywać pełny numer w wynikach?
Nie przy każdym częściowym dopasowaniu. Przy krótkich fragmentach lepiej maskować część cyfr, aby ograniczyć masowe pozyskiwanie numerów i przypadkowe ujawnianie danych.
Jaki błąd usunąć w pierwszej kolejności?
Przechowywanie telefonów wyłącznie jako sformatowanego tekstu. Bez dodatkowej, znormalizowanej wersji numeru wyniki będą zależeć od spacji, myślników i prefiksów, a wydajność wyszukiwania szybko spadnie.
