Programmering

Introduksjon til dvalesøk

Det finnes mange nettapplikasjoner som gir tilgang til store mengder data som er lagret i en relasjonsdatabase, men hva er den enkleste måten å gjøre det mulig for brukere å søke gjennom disse dataene og finne det de trenger? I denne artikkelen introduserer Dr. Xinyu Liu Hibernate Search, som integrerer de sofistikerte søkefunksjonene til Lucene med det kjente rammeverket for objektrelasjonell kartlegging av Hibernate.

Apache Lucene er et høytytende, utvidbart søkemotorbibliotek i fulltekst skrevet i Java. I begynnelsen er det kanskje ikke åpenbart hvorfor du trenger noe slikt - tross alt blir dataene dine pent arkivert i en anstendig relasjonsdatabase. Mens en RDBMS kan gjøre en god jobb med å levere transaksjons CRUD-operasjoner på data som er lagret i en relasjonsmodell, er søkefunksjoner som er definert i SQL ikke alltid i stand til å oppfylle både de funksjonelle og ikke-funksjonelle kravene til prosjektene dine. Det er en rekke spørringstyper som RDBMS generelt ikke støtter uten leverandørutvidelser:

  • Fuzzy-spørsmål, der "fuzzy" og "wuzzy" regnes som treff
  • Ord som stammer spørsmål, som anser "ta", "tok" og "tatt" som identiske
  • Lydlignende spørsmål, som anser "katt" og "kat" for å være identiske
  • Synonymspørsmål, som anser "hopp", "hopp" og "sprang" for å være identiske
  • Spørsmål om binære BLOB-datatyper, for eksempel PDF-dokumenter, Microsoft Word- eller Excel-dokumenter, eller HTML- og XML-dokumenter

Mer skuffende, er ikke SQL-søkeresultater rangert etter poengrelevansepoeng. SQL-standarden er ganske enkelt ikke ment for spørring i fulltekst.

Lucene-søkefunksjoner er derimot ubegrensede. Lucene håndterer alle nettopp nevnte spørsmål og mer; det lar deg også finne tekstdokumenter som ligner på andre dokumenter gjennom den avanserte termvektor-spørringen. For eksempel kan du søke i innholdet i en rekke bøker for å finne en med innhold som ligner på Dvalemodus i aksjon. Analysatorarkitekturen i Lucene utnytter Java's innebygde muligheter for internasjonalisering og lokalisering, noe som gjør fulltekstforespørsel tilgjengelig på forskjellige språk over hele verden. Lucene leverer fremragende ytelse gjennom noen innovative teknikker, for eksempel en omvendt indeks. Apache Lucene-nettstedet inneholder en liste over ytelsesverdier som viser hvor godt Lucene presterer og skalerer.

Merk at noen databaseleverandører implementerer søkefunksjoner i fulltekst i produktene sine som SQL-utvidelser. I noen grad er disse proprietære funksjonene ganske enkle å bruke, men de kompromitterer portabiliteten til applikasjonene dine på databasenivå. Dessuten passer ikke funksjonene til brukeropplevelsen som Lucene tilbyr, og under ekstreme forhold er Lucenes ytelse overlegen.

Dvalemodus og Java Persistence API

Dvalemodus er et høyt ytende, modent objekt-relasjonelt kartlegging (ORM) -bibliotek. Som en ikke-påtrengende ORM-løsning, gir Hibernate API for objektspørring for vanlige gamle Java-objekt (POJO) persistensmodellklasser og automatiske databindinger mellom objektet og relasjonelle representasjoner av persistensdata. I hovedsak lar den deg fokusere på domenemodellorientert programmering.

Java Persistence API (JPA) er standard objekt-relasjonell kartlegging og persistensadministrasjonsgrensesnitt definert som en del av Java EE 5, den siste versjonen av enterprise Java-spesifikasjonen. I stor grad inspirert av dvalemodus, dukket JPA opp for å erstatte den kontroversielle bønneprogrammeringsmodellen. JPA har en brukervennlig POJO-programmeringsstil og objekt-spørringsgrensesnitt (JPAQL); en forbedring av JPA over enhetsbønner er at du ikke trenger en EJB 3-beholder for å kjøre applikasjoner som bruker API, fordi den støtter både frittstående (Java SE) og containerstyrte (Java EE) kjøremodus. Populære JPA-leverandører inkluderer Apache OpenJPA og Oracle TopLink, i tillegg til Hibernate selv, som implementerer JPA-spesifikasjonen gjennom tilleggsprogrammet Hibernate Annotations og Hibernate EntityManager-modulene. I denne artikkelen vil jeg bruke JPA / dvalemodus som stenografi for de to som jobber sammen.

Denne artikkelen presenterer teknologien Hibernate Search for deg gjennom et eksempel på applikasjon programmert i en POJO-stil med de siste vår 2.5-merknadene. Før du begynner, bør du ha grunnleggende kunnskap om Spring, Hibernate / JPA og Lucene.

$config[zx-auto] not found$config[zx-overlay] not found