Programmering

Introduktion til dvale-søgning

Der findes mange webapplikationer, der giver adgang til store mængder data, der er gemt i en relationsdatabase, men hvad er den nemmeste måde at gøre det muligt for brugere at søge gennem disse data og finde det, de har brug for? I denne artikel introducerer Dr. Xinyu Liu Hibernate Search, som integrerer Luces sofistikerede søgemuligheder med den velkendte ramme for objektrelationskortlægning i Hibernate.

Apache Lucene er et højtydende, udvideligt søgemaskinebibliotek med fuld tekst skrevet i Java. I første omgang er det måske ikke indlysende, hvorfor du har brug for sådan en ting - trods alt er dine data pænt gemt væk i en anstændig relationsdatabase. Mens en RDBMS kan gøre et godt stykke arbejde med at levere transaktionelle CRUD-operationer på data gemt i en relationel model, er søgefunktioner defineret i SQL ikke altid i stand til at imødekomme både de funktionelle og ikke-funktionelle krav til dine projekter. Der er en række forespørgselstyper, som RDBMS generelt ikke understøtter uden leverandørudvidelser:

  • Fuzzy-forespørgsler, hvor "fuzzy" og "wuzzy" betragtes som matches
  • Ord, der stammer forespørgsler, der betragter "tage", "tog" og "taget" som identiske
  • Lydlignende forespørgsler, der betragter "kat" og "kat" for at være identiske
  • Synonyme forespørgsler, der betragter "spring", "hop" og "spring" for at være identiske
  • Forespørgsler på binære BLOB-datatyper, såsom PDF-dokumenter, Microsoft Word- eller Excel-dokumenter eller HTML- og XML-dokumenter

Mere skuffende er SQL-søgeresultater ikke rangeret efter matchrelevansresultater. SQL-standarden er simpelthen ikke beregnet til forespørgsel i fuldtekst.

Lucene-søgefunktioner er derimod ubegrænsede. Lucene håndterer alle netop nævnte forespørgsler og mere; det giver dig også mulighed for at finde tekstdokumenter svarende til andre dokumenter gennem dets avancerede term-vektor-forespørgsel. For eksempel kan du søge i indholdet af et antal bøger for at finde en med indhold svarende til det fra Dvale i aktion. Analysatorarkitekturen i Lucene udnytter Java's indbyggede internationaliserings- og lokaliseringsfunktioner, som gør fuldtekstforespørgsel tilgængelig på forskellige sprog overalt i verden. Lucene leverer fremragende præstation gennem nogle innovative teknikker, såsom et omvendt indeks. Apache Lucene-webstedet indeholder en liste over præstationsbenchmarks, der viser, hvor godt Lucene presterer og skalerer.

Bemærk, at nogle databaseleverandører implementerer søgning i fuldtekst i deres produkter som SQL-udvidelser. I nogen grad er disse proprietære funktioner ret nemme at bruge, men de kompromitterer bærbarheden af ​​dine applikationer på databaseniveau. Desuden matcher funktionerne ikke den brugeroplevelse, som Lucene tilbyder, og under ekstreme forhold er Lucene's ydeevne overlegen.

Dvaletilstand og Java Persistence API

Dvaletilstand er et højtydende, modent objekt-relationelt kortlægningsbibliotek (ORM). Som en ikke-påtrængende ORM-løsning giver Hibernate API til objektforespørgsel til almindelige gamle Java-objekt (POJO) persistensmodelklasser og automatiske databindinger mellem objektet og relationelle repræsentationer af persistensdata. I det væsentlige lader det dig fokusere på domæne modelorienteret programmering.

Java Persistence API (JPA) er den standard objektrelationelle kortlægning og persistensadministrationsgrænseflade, der er defineret som en del af Java EE 5, den nyeste version af virksomhedens Java-specifikation. Størst inspireret af dvale, opstod JPA for at erstatte den kontroversielle enhed bønne programmeringsmodel. JPA har en brugervenlig POJO-programmeringsstil og objektforespørgselsgrænseflade (JPAQL); en forbedring af JPA i forhold til enhedsbønner er, at du ikke har brug for en EJB 3-container til at køre applikationer, der bruger API'et, fordi den understøtter både standalone (Java SE) og containeradministreret (Java EE) kørselstilstand. Populære JPA-udbydere inkluderer Apache OpenJPA og Oracle TopLink samt Hibernate selv, som implementerer JPA-specifikationen gennem tilføjelsesmodulerne Hibernate Annotations og Hibernate EntityManager. I denne artikel bruger jeg JPA / dvale som stenografi for de to, der arbejder sammen.

Denne artikel præsenterer teknologien i dvale-søgning for dig gennem en prøveapplikation programmeret i en POJO-stil med de seneste Spring 2.5-kommentarer. Inden du begynder, skal du have grundlæggende viden om Spring, Hibernate / JPA og Lucene.