Litt om søk

Litt om søk

Sun 18 July 2010

I denne posten går jeg gjennom et forslag på oppdeling av søk, samt litt om hvorfor et godt søkeverktøy er viktig. Ved å dele utviklingen av søket i

Viktigheten av et godt søk

Om en besøkende ikke finner det produktet de leter etter mister du et salg! Om dette skjer flere ganger vil en fort få merke at dårlige søk kan være kostbart.

Ofte defineres interne nettsøk ved hjelp av tre forskjellige kategorier, kjennetegnet av hva man er ute etter å finne.

  • Utforskende: Her vet man gjerne ikke helt hva man er ute etter. Man "browser" og håper på interessante treff. Her vil en f.eks ha mulighet til å komme med forslag og hjelp til hva som kan søkes på. Eksempel på slike type søk er om man ønsker å finne ut mer om programmering i java, eller lignende.
  • Innsnevrende: Her vet man omtrent hva man er ute etter. Men man trenger hjelp til å avgrense resultatene.
  • Eksakt: Her vet man eksakt hva man er ute etter, men trenger å kunne sette inn den informasjonen en har om det man skal finne. Eksempelvis om du har lastet ned et preview bilde fra iStockphoto.com og vil kjøpe originalen på et senere tidspunkt. Da vet du eksakt hva du leter etter, og kan søke det opp igjen ved hjelp av filnavnet.

Hva er er godt søk

  • Søket må støtte skrivefeil. Eksempelvis bør søket "utvikkling" returnerere noenlunde samme treffene som "utvikling".
  • Søket må ha god nulltreffside slik at brukeren kommer seg videre på en enkel måte. Ikke ulikt det å lage egendefinerte 404 feilmeldinger.
  • Søkene må logges, loggene må analyseres og søket eventuelt justeres.
  • Søket må ha filtreringsmuligheter tilpasset brukeren. Husk at det fort kan bli for mange valgmuligheter.

k2_search_result

Implementasjon VS Presentasjon

I en artikkel som dette vil det være naturlig å påpeke at et søk består av to separate deler, implementeringen av søkemotoren og presentasjonen av søkeresultatene (inklusiv muligheter for å legge inn søkestreng + avgrense søkeresultatene).

Implementasjonen av søket kan gjøres på veldig mange forskjellige måter, og faktorer er relevanse, ytelse, skalering med mer.

Presentasjonen av søket handler om å utvikle / bruke et skjermbilde som gjør at man på en intuitiv måte kan gå videre til et relevant resultat. Det er ikke selve søkeresultatssiden som er målet for et søk, men den, eller de, artiklene som er relevante nok for brukeren til å trykke seg inn på.

I presentasjonen ønsker folk å kunne søke på samme måte som de er vant til, d.v.s som google, bing og yahoo for å nevne noen av de store søkemotorene.

  • Søk på enkelt ord: netthandel
  • Søk på flere ord: hjemmeside, netthandel, publiseringsløsninger
  • Søk på deler av en setning: "gratis nettside"
  • Vilkårlige tegn: web*
  • Logiske operatorer: Webdesign OR Webutvikling AND java
  • Inkludere ord i søkeresultatet: Webutvikling + java
  • Eksludere ord fra søkeresultatet: Webutvikling - java

Noen implementasjoner

  • Apache Lucene / Solr: Lucene er et bibliotek for søk og indeksering. Solr er en enterprise plattform for søk som bruker Lucene. Solr kjøres som en servlet under f.eks jetty, tomcat eller glassfish. Både Lucene og Solr er skrevet i Java, men Solr kommuniserer (post/get) via XML så du kan bruke hvilket som helst språk for klientdelen. Solr brukes av blant andre digg.com, monster.com, linkedin.com og whitehouse.gov. Se flere brukereksempler på Lucene / Solr showcase wikien her.
  • My SQL Full-text search options: Gir oss muligheten til å søke raskere en "SELECT navn FROM testtabell WHERE firma LIKE '%mbmedia%';". Ved å bruke full-text search vil vi også få resultatsettet tilbake sortert etter relevans. Relevans defineres som et desimaltall hvor 0 er ikke-relevant. For å skrive et søk i php trenger vi ikke gjøre stort mer en å hente inn søkefrasen fra brukeren, bygge opp databasespørringen og sortere / presentere resultatet til brukeren etterpå. Denne metoden kan kun brukes på MyIsam tabeller, og felter av typen CHAR, VARCHAR, eller TEXT. Les mer om full-text-search på mysql sine hjemmesider her.
  • Sphinx: Støtter MySQL, PostgreSQL og andre ODBC databaser. Består av en indexer, daemon og et kommandolinje søkeverktøy. Sphinx er skrevet i C++ og kjører på Linux, UNIX®, Microsoft® Windows®, og Mac OS X.Sphinx brukes av blant andre craiglist.org, diskusjon.no, thepiratebay.org og joomla.org.

Noen måter å presentere søkeresultat på

  • Noen utvalgte søkebokser, tilhørende avanserte funksjoner og søkeresultat. Ikke uventet er det mange måter å tilnærme seg presentasjon av søk på.
google_enkelt google_avansert google_resultat
istockphoto_enkelt istockphoto_avansert istockphoto_resultat
joomla_enkelt joomla_resultat

  • Hvor mye innhold ønsker du å vise i resultatet? For interne søk vil det kanskje være lurt å vise nok til at brukeren kan se om dette er riktig eller galt resultat. For eksterne søkemotorer som Google, Bing og Yahoo vil for mye tekst / informasjon i søkeresultatet føre til at brukeren ikke vil klikke på resultatet selv om det er riktig. Dette fordi han allerede har fått den informasjonen han trengte i søkeresultatet. Dette fører til færre treff på siden til artikkelforfatter og vil av noen sees på som at søkemotoren stjeler informasjon fra artikkelens opprinnelige nettsted.

google_vaer


  • Grunnet brukervennlighet listes ofte søkeresultater i rader, der hvert treff har en rad. Vi kan gjøre presentasjonen mer brukervennlig ved å gruppere viktig informasjon i kolonner som går på tvers av radene med søkeresultater. Dette vil gjøre det lettere for brukerene å scanne igjennom etter viktige parametere som f.eks pris. Jeg har lagt ved to eksempler under, og mange vil nok mene at eksempelet til venstre er mest oversiktlig og lettest å scanne igjennom. I det første eksempelet er det vanskelig å sammenligne paramtere, noe som kommer av at man ikke har valgt å gruppere viktig informasjon i egne kolonner.
jed_searchresult komplett_searchresult
Radbasert. (JED) Radbasert, men med kolonner for å fremheve viktige parametere. (Komplett)
  • For interne søk er det viktig, og samtidig mulig, å tilpasse presentasjonen til det innholdet og de brukerene man har. Bruk denne muligheten, og ikke nødvendigvis presentere det mest generiske grensesnittet du kan komme på.
  • Tittel / beskrivelse i søkeresultatet må være relevant for artikkelen som resultatet fører til.
  • Er det søk som gjentar seg ofte kan du optimalisere for disse.
  • Er det spesielle søk som utmerker seg med stadige nulltreff? Du kan da legge inn innhold som gir folk svar på det de lurer på. Om du eksempelvis har mange søk (og nulltreff) på "hvordan forbedre mitt interne søk", kan du lage en artikkel som omhandler akkurat dette. Da vil de neste som søker etter det samme faktisk få svar på det de lurer på.

Oppsummering

Opprinnelig skulle denne artikkelen handle om Apache Lucene og våre erfaringer med å få dette opp å kjøre på et eksempel datasett. Underveis fant jeg ut at det ble å starte i feil ende, og at det ville være mer naturlig med en "introduksjon til søk" artikkel først.

Implementasjon og presentasjon fører frem til det endelige resultatet, nemlig brukerens opplevelse av ditt søk. Ved å dele opp utviklingen kan designeren jobbe mot brukerene og deres behov allerede i en tidlig fase v.h.a prototyper, mockups og skisser.

Jeg håper jeg får mulighet til å komme med flere artikler innenfor dette temaet, ikke minst de planlagte erfaringene med Apache Lucene og eventuelle andre implementasjoner vi gjør oss erfaringer med.

Tagged as : diverse