Strona Główna / Blog

Zbuduj Własną Wyszukiwarkę z Azure Search

Damian Mazurek

Damian Mazurek

CTO w Chmurowisko. Jestem architektem pracującym z .NET, Node.JS i Microsoft Azure. Specjalizuję się w budowaniu globalnie rozproszonych aplikacji oraz rozwiazań IoT. W Chmurowisku odpowiadam za projekty związane z tworzeniem rozwiązań dla naszych klientów z wykorzystaniem rozwiązań PaaS oraz FaaS. Skontaktuj się z nim pisząc na ten adres.

Azure Search

W trakcie ostatniego warsztatu w siedzibie klienta, zmierzyliśmy się z tematem stworzenia systemu pozwalającego na wyszukiwanie ciekawych materiałów poprzez czat Facebooka oraz na stronie klienta.

Nasz klient rozważał kilka opcji. W grę wchodziło użycie rozwiązania ala Elasticsearch (niestety potrzebny by był ktoś kto będzie tym zarządzał), albo użycie hostowanej usługi Search.

Wybór padł na rozwiązanie numer 2.

Aplikacja bazowa znajdowała się na serwerach klienta i migrowanie danych do chmury nie było w tym wypadku możliwe. Zaproponowaliśmy więc rozwiązanie hybrydowe.

Główny element systemu wciąż znajdował się on-premises, natomiast search, bot oraz inteligentne rozpoznawanie tekstu zostało przeniesione do chmury. Dodatkowo została zaprojektowana aplikacja pozwalająca na odpowiednie tworzenie indeksów i synchronizację searcha z lokalną bazą, odciętą od dostępu do internetu.

Interfejs komunikacyjny z użytkownikami za pomocą Facebooka został oparty o Microsoft Bot Framework, który po dostaniu zapytania, przesyłał go do Azure Functions, która rozdzielała go z wykorzystaniem Text Analytics API na frazy kluczowe, które były przeszukiwane przez Azure Search.

Azure Search

Czym Jest Azure Search?

Dzisiaj opowiem Wam o usłudze Azure Search i jej praktycznym zastosowaniu.

Jest to usługa  search-as-a-service, udostępniająca developerom bogate API oraz SDK, umożliwiające zbudowanie zaawansowanego systemu do przeszukiwania contentu w aplikacjach webowych, mobilnych oraz klasy enterprise.

Poniżej znajduje się lista kluczowych cech tej usługi.

Full Text Search

Full text search to podstawowa funkcjonalność, dzięki której Azure Search jest w stanie udostępnić zaawansowane usługi wyszukiwania dla aplikacji z niego korzystających.

Zapytania przesyłane do Azure Search mogą wykorzystywać dwa standardy:

  • simple query syntax (pozwalający na prostą konstrukcję zapytań bazując na operatorach logicznych, frazowych, suffixowych oraz pierwszeństwa).
  • lucene query syntax (który udostępnia wszelką funkcjonalnośc z simple query syntax, dodatkowo rozbudowując ją o wyszukiwanie rozmyte, wyszukiwanie zbliżeniowe, zwiększanie wartości i wyrażenia regularne).

Integracja Danych

Azure Search jest w stanie zintegrować dowolne dane, pod warunkiem, że są one przesłane do niego w strukturze JSON.

Dla PaaS-owych usług Azure takich jak:

Istnieją również mechanizmy automatycznego indeksowania, podczas których dane są automatycznie konwertowane w formę JSON.  

Indeksatory Azure Blob mogą wykonywać „crackowanie” dokumentów w celu indeksowania głównych formatów plików, w tym dokumentów Microsoft Office, PDF i HTML.

W przypadku automatycznych indeksatorów dla usług PaaS, jesteśmy w stanie włączyć w nich scheduler, który odświeży nasze indeksy np. co godzinę. Przypadku pozostałych źródeł (np. baz on-premises) trzeba zbudować samemu rozwiązanie do synchronizacji indeksu Azure Search za pomocą wywołań API, lub wykorzystując istniejące SDK.

Analizatory Lingwistyczne

Analizatory są komponentami używanymi do przetwarzania tekstu podczas indeksowania i operacji wyszukiwania. Istnieją dwa rodzaje:

  • Niestandardowe – są to analizatory leksykalne, używane do złożonych zapytań z użyciem dopasowania fonetycznego i wyrażeń regularnych.
  • Analizatory języka Lucene lub Microsoft – są one używane do inteligentnego posługiwania się językoznawstwem, w tym czasownikami, płcią, nieregularnymi rzeczownikami w liczbie mnogiej (na przykład „mysz” a „myszy”), rozłożeniem słów, łamaniem słów (dla języków z bez spacji) i wieloma innymi mechanizmami. (więcej)

Geo-search

Usługa Azure Search przetwarza, filtruje i wyświetla położenia geograficzne. Umożliwia użytkownikom przeglądanie danych w oparciu o bliskość wyniku wyszukiwania do fizycznej lokalizacji.

Funkcje User-Experience

Azure Search dostarcza nam kilku cech, które pozwalają stworzyć nam wyszukiwarkę przyjazną dla użytkownika.

  • Sugestie wyszukiwania mogą być włączone dla predefiniowanych pól w dokumentach, pozwalając na podpowiadanie użytkownikowi w polu searcha odpowiednich wartości z dokumentów będących w indeksie.
  • Nawigacja po fasetach włączana za pomocą jednego parametru w query, pozwalająca na zwrócenie listy faset, mogących służyć za listę kategori wyników wyświetlanych obok listy wyników w celach lepszej nawigacji.
  • Filtry mogą być używane w celu obsłużenia nawigacji fasetowej w interfejsie użytkownika, dzięki nim możemy rozszerzyć możliwość wyszukiwania naszego query poprzez odpowiednie kategorie. Używają one składni OData.
  • Hit highlighting stosuje formatowanie tekstu do pasującego słowa kluczowego w wynikach wyszukiwania. Możesz wybrać pola, które mają zwrócić podświetlone fragmenty.
  • Sortowanie jest oferowane dla wielu pól za pośrednictwem schematu indeksu, a następnie przełączane w czasie zapytań za pomocą jednego parametru wyszukiwania.
  • Paging i ograniczanie wyników wyszukiwania sa proste dzięki możliwości precyzyjnej kontroli nad wynikami wyszukiwania.

Trafność Wyszukiwań

Funkcjonalność simple scoring jest kluczową zaletą usługi Azure Search.

Profile scoringowe służą do modelowania trafności jako funkcji wartości w samych dokumentach. Dzięki temu jesteśmy w stanie wyświetlać np. nowsze artykuły lub te oznaczone jako premium wyżej w wynikach wyszukiwania. Dodatkowo można także tworzyć profile scoringowe za pomocą tagów do spersonalizowanej punktacji na podstawie preferencji wyszukiwania klientów, które były śledzone i przechwytywane osobno.

Monitorowanie i Raportowanie

Search traffic analytics to wzorzec do implementacji feedbacku dla Twojej usługi wyszukiwania. Ten wzorzec opisuje niezbędne dane i sposób ich gromadzenia za pomocą Application Insights. Dzięki temu mechanizmowi istnieje możliwość uzyskania wglądu w informacje o użytkownikach i ich zachowaniu.

Dysponując danymi o tym, co wybierają użytkownicy, możesz podejmować decyzje, które jeszcze bardziej poprawią jakość wyszukiwania poprzez odpowiednie dostosowywanie trafności wyszukiwań.

Architektura Rozwiązań Azure Search

W ramach pisania tego artykułu zbudowałem prosty serwis inteligentnego przeszukiwania materiałów dotyczących Azure.

LINK DO SERWISU.

Azure Search - DEMO

Na jego podstawie przedstawię Wam prostą architekturę jak zbudować taki serwis.

Pierwszym elementem jest posiadanie źródła danych, na którego podstawie będzie tworzony nasz indeks, z którego będziemy wyszukiwać. W przypadku tej aplikacji wykorzystałem Azure SQL, z dwoma tabelami – jedną z danymi podstawowymi na temat materiałów i drugą z kategoriami.

Do niej podłączyłem Azure Search i ustawiłem godzinne aktualizacje indeksów. Następnie utworzyłem FrontEnd w Angular, który, poprzez wywoływanie API Searcha, odpytuje usługę o dane zawarte w indeksie na podstawie fraz wprowadzonych przez użytkownika.

Dane są stronicowane, z fasetami ustawionymi na kategorię (pozwala to na stworzenie kategoryzacji znajdującej się po lewej stronie).

Stworzenie takiego systemu dzięki Azure Search zajęło mi 4 godziny. W klasycznym rozwiązaniu, stawiania własnego Elasticsearch lub implementowania mechanizmów wyszukiwania samemu, czas liczony byłby na pewno w dniach.

Slajd1

Następny Krok

Jeżeli interesuje Cię temat Azure Search, to polecam jedną z dwóch opcji:

  1. Stwórz własne konto w Azure i stwórz testową aplikację w Azure Search (znajdzie przykładowe dane w samej usłudze)
  2. Odwiedź mnie na szkoleniu: Najbardziej Praktyczne Szkolenie Azure Na Świecie

Czołem i miłego wyszukiwania!

Dołącz do listy mailingowej!

Dołącz do naszego newslettera

Staramy się wysyłać tylko wartościowe informacje, np. co miesiąc dostaniesz spis najważniejszych nowości z chmur Azure, AWS i GCP, z krótkimi opisami i linkami.