Guided Navigation - Beispiele von Schweizer Websites
-
Upload
walter-schaerer -
Category
Technology
-
view
919 -
download
1
description
Transcript of Guided Navigation - Beispiele von Schweizer Websites
Websites mit Guided Navigation Walter Schärer / Daniel Nydegger über Faceted Search
Wann eignet sich eine Facettierte Suche?
• Art des Datenbestandes–Gut strukturierte Daten
(Metainformationen)–Viele Daten
• Zielpublikum–Web Savvy?–Stöbern nach Informationen
Wie setzt man eine Guided Navigation um?
• Make or buy? Ein Thema für sich…
• Kauf von Software-Tools wie Endeca.com (vacando, migros)
• Entwicklung mit OpenSource via Lucene / Solr / Lucid (jobwinner)
• Entwicklung mit PHP (movies.ch)
Welche SEO-Aspekte muss man beachten?
• AJAX vs. Crawlbarkeit
• URL-Struktur / Multiple Content• http://vacando.ch/italien
• http://vacando.ch/alberobello/apulien/italien
Welche Usability-Vorgaben sollte man befolgen?
• AJAX vs. Crawlbarkeit...
• Ausprägung der Facetten je nach Thema
• Wie knifflig ist die Bedienung?
• Komplexität von Cross- und Up-Selling
• Beherrscht man eine Business-Rule-Engine?
Inline ExpandScrollingNeue SeiteDynamisches MenuPagingAuto CompleteKombinationen davon…
Daniel Nydegger
Software Architekt / Senior Entwickler
Webapplikationen im Open Source Umfeld
Lucene / Solr
• Solr ist eine Enterprise Search Plattform
• Bietet alle Möglichkeiten einer modernen Suche
• Hochskalierbar und weit verbreitet
• Big and Small Data Solutions
• Basiert auf Apache Lucene
Data Processing
Auschnitt Solr Index
• Einzelne oder mehrere Werte für eine Facete in einem Dokument
• Die Felder enthalten die analysierten Werte
• Text, numerische und Date Werte
Einfache Facet Abfrage
facet.field=branch&facet.sort=count
http://.../select/?facet=true&...&indent=on&rows=3&q=*:*
Allgemeine Struktur des Requests
<lst name="facet_counts"> <lst name="facet_fields"> <lst name="branch"> <int name="humanresources">172</int> <int name="versicherungen">59</int> <int name="baugewerbeimmobilien">22</int> <int name="industrieallgemein">19</int> <int name="verbaendeorganisationen">19</int> ... ... <int name="grosshandel">2</int> <int name="elektronikelektrotechnik">1</int> <int name="fahrzeugmarkt">1</int> <int name="freizeitkultursport">1</int> <int name="gastgewerbehotellerietourismus">1</int> <int name="oeffentlicheverwaltung">1</int> </lst> </lst></lst>
Facet Selection
fq=branch:(versicherungenOR banken)
<lst name="facet_counts"> <lst name="facet_fields"> <lst name="branch"> <int name="versicherungen">59</int> <int name="banken">18</int> ... <int name="anlagemaschinenmetallbau">0</int> <int name="aviatiklogistiktransportverkehr">0</int> <int name="baugewerbeimmobilien">0</int> <int name="biotechnologiechemiepharma">0</int> <int name="detaileinzelhandel">0</int> <int name="dienstleistungenallgemein">0</int> ... ... <int name="verbaendeorganisationen">0</int> </lst> </lst></lst>
Multiselection innerhalb Facet mit OR Verknüpfung
Nicht selektionierte Facets werden mit count = 0 zurück gegeben
Andere Response Formate
fq=branch:(versicherungenOR banken)&wt=json
Mit wt=javabin werden serialisierte Objekte erstellt
"facet_counts":{ "facet_queries":{}, "facet_fields":{ "branch":[ "versicherungen",59, "banken",18, ... "anlagemaschinenmetallbau",0, "aviatiklogistiktransportverkehr",0, "baugewerbeimmobilien",0, "biotechnologiechemiepharma",0, "detaileinzelhandel",0, "dienstleistungenallgemein",0, ... ... "verbaendeorganisationen",0]}, "facet_dates":{}, "facet_ranges":{}}}
Facet Selection mit Exclusion
facet.field={!ex=xy}branch&fq={!tag=xy}branch:(versicherungenOR banken)
Die nicht selektionierten Facet Values befinden sich auch in der Facet Response
Die Query Results entsprechen der Selektion
<lst name="facet_counts"> <lst name="facet_fields"> <lst name="branch"> <int name="humanresources">172</int> <int name="versicherungen">59</int> <int name="baugewerbeimmobilien">22</int> <int name="industrieallgemein">19</int> <int name="banken">18</int> ... ... <int name="grosshandel">2</int> <int name="elektronikelektrotechnik">1</int> <int name="freizeitkultursport">1</int> <int name="oeffentlicheverwaltung">1</int> </lst> </lst></lst>
Multi Facet Selection
facet.field=branch&fq=branch:versicherungen&
facet.field=region&fq=region:(011 OR 006)
011=Kanton Zürich006=Innerschweiz
Alle Inserate in der Branche Versicherungen, in der Region Zürich und Innerschweiz
Die einzelnen Facets werden AND verknüpft
Alle nicht selektionierten Werte sind haben count = 0
<lst name="facet_counts"> <lst name="facet_fields"> <lst name="branch"> <int name="versicherungen">25</int> ... <int name="anlagemaschinenmetallbau">0</int> <int name="aviatiklogistiktransportverkehr">0</int> <int name="banken">0</int> ... <int name="verbaendeorganisationen">0</int> </lst> <lst name="region"> <int name="011">19</int> <int name="006">6</int> ... <int name="003">0</int> <int name="010">0</int> <int name="013">0</int> </lst> </lst></lst>
Multi Facet Selection mit Exclusion
facet.field={!ex=xy1}branch&fq={!tag=xy1}branch:versicherungen&
facet.field={!ex=xy2}region&fq={!tag=xy2}region:(011 OR 006)
Die counts der nicht selektionierten Facet Values sind zusätzliche Treffer, wenn der entsprechende Facet Value selektioniert wird
<lst name="facet_counts"> <lst name="facet_fields"> <lst name="branch"> <int name="humanresources">121</int> ... <int name="versicherungen">25</int> ... <int name="banken">13</int> <int name="informatik">2</int> <int name="freizeitkultursport">1</int> <int name="elektronikelektrotechnik">0</int> </lst> <lst name="region"> <int name="011">19</int> ... <int name="006">6</int> ... <int name="003">5</int> <int name="007">5</int> </lst> </lst></lst>
Range Facets
facet.field=branch&fq=branch:versicherungen&
facet.range=pubdate&
facet.range.start=NOW-6DAY/DAY
facet.range.end=NOW/DAY
facet.range.gap=+1DAY
Gruppierung der Treffer nach konstanten zeitlichen oder numerischen Abständen
<lst name="facet_counts"> <lst name="facet_queries"/> <lst name="facet_fields"> <lst name="branch"> <int name="versicherungen">59</int> </lst> </lst> <lst name="facet_dates"/> <lst name="facet_ranges"> <lst name="searchsubtimestamp"> <lst name="counts"> <int name="2011-12-08T00:00:00Z">4</int> <int name="2011-12-07T00:00:00Z">5</int> <int name="2011-12-06T00:00:00Z">7</int> <int name="2011-12-05T00:00:00Z">3</int> <int name="2011-12-04T00:00:00Z">2</int> <int name="2011-12-03T00:00:00Z">1</int> </lst> </lst> </lst></lst>
Facet Queries
facet.field=branch&fq=branch:versicherungen&
facet.query=pubdate:[NOW-7DAY TO *]
facet.query=pubdate:[NOW-21DAY TO *]
Gruppierung der Treffer in beliebigen Abständen
Als Query können auch komplexe Funktionen mit Index Feldern verwendet werden
<lst name="facet_counts"> <lst name="facet_fields"> <lst name="branch"> <int name="versicherungen">59</int> </lst> </lst> <lst name="facet_queries"> <int name="pubdate:[NOW-7DAY TO *]">24</int> <int name="pubdate:[NOW-21DAY TO *]">31</int> </lst></lst>
Hierarchische Facets
facet.field=sectionmain&fq=sectionmain:(004 OR 017)facet.field=sectionsub&fq=sectionsub:(004.012 OR 017.*)
Anzeige aller Child Facets mit Parent = 017Parent / Child Auswahl für 004.012
sectionmain und sectionsub sind Multi Valued, Anzeige der weiteren Facet Values
<lst name="facet_counts"> <lst name="facet_queries" /> <lst name="facet_fields"> <lst name="sectionmain"> <int name="017">27</int> <int name="004">12</int> <int name="005">3</int> <int name="013">3</int> </lst> <lst name="sectionsub"> <int name="017.091">13</int> <int name="004.012">12</int> <int name="017.130">8</int> <int name="017.129">5</int> <int name="013.052">3</int> <int name="005.027">2</int> <int name="005.044">1</int> <int name="017.083">1</int> </lst> </lst></lst>
Response Time Solr Request
• Response Time für Facetierung mit Selektion von Values ist auch für grosse Datenmengen (> 1 Mio) kleiner als 10 ms
• Auch in Verbindung mit Semantic Search/Volltextsuche bleibt die Response Time hoch performant
Caching der Filter Queries, Autowarming der Caches nach insert von Daten
Faceted Search Facts I
• Ein klickbarer Prototyp hilft die vielfältigen Möglichkeiten der Datenanalyse zu diskutieren
• Die Komplexität der Datenanalyse ist vor dem User zu verbergen
• Default Ranges, [A-Z] Buckets, Suggest und Hierachische Facets verwenden
Komplexität der Faceted Search, Analyse, Tricks
Faceted Search Facts II
• Mehrfachselektion ist bei Single Value Feld gut einsetzbar
• Mehrfachselektion auf Multivalue Felder wir im Allgemeinen schlecht verstanden
• Eine grosse Menge an Facet Values ist eine Herausforderung für die Usability
Enfach/Mehrfach Selektion von Facet Values
Beyond Faceting
Semantic Search
Multilanguage
Analyzing / Data Processing
Scaleability / Cloud
Big / Small Data Management
Recommendation Engine
Machine LearningMatchingCategorisation
Autosuggest
Spell Checking
More Like This
Result Highlighting
Geo-Search
Flexible Ranking
Slides: http://e-byz.chhttp://spectromedia.ch
Walter Schärer verantwortet als Senior Projektleiter Internetprojekte unterschiedlicher Ausprägung.
Daniel Nydegger ist als Software Architekt und Senior Entwickler für die Umsetzung von Webapplikationen im Open Source Umfeld tätig.
https://www.xing.com/profile/Walter_Schaerer
https://www.xing.com/profile/Daniel_Nydegger3
Web-Beispiele für Multi-Faceted-Navigation:
www.vacando.ch www.migros-ferien.ch www.jobwinner.chwww.movies.chwww.tutti.chfundlab.credit-suisse.com