Faceted search - Hoe het werkt (Drupal)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
Het meest aansprekende voorbeeld van facet search dat ik ken: De Tweakers.net Pricewatch
Veelbelovend!

Faceted search heeft betrekking op een zoekfunctie die meerdere filters, oftewel facetten, tegelijkertijd kan toepassen. Hierbij een impressie van het systeem dat in Drupal 7 beschikbaar is middels de Facet API.

Overzicht

Search-server

Faceted search vereist een eigen search-server (of search-database):

  • Apache Solr wordt vaak gebruikt als search-server, maar dat is niet noodzakelijk: Drupal kan prima de eigen database gebruiken als search-server. Dit artikel gaat uit van een Drupal search-server
  • Aanmaken van een Drupal search-server stelt onthutsend weinig voor. Het echte werk begint hieronder, bij het defineren van de indices.

Search-index

  • De search-index vormt de eigenlijke inhoud van de zoek-database
  • Indien je gebruik wilt maken van een view voor de zoekresultaten, dan moet je vanwege een bug de default index gebruiken: Andere indices zijn niet toegankelijk voor views
  • Als je niet de default index gebruikt, moet je op het tabblad Fields, het veld toevoegen dat gebruikt wordt voor product reference, om vervolgens toegang te krijgen tot alle achterliggende velden.

Zoekpagina-views

De zoekpagina-view is gebaseerd op de overeenkomstige zoek-index

Je hebt een verhikel nodig om gefilterde resultaten te tonen. De standaardmanier om deze zogenaamde zoekpagina's weer te geven, lijkt te zijn middels een view:

  • Deze view moet gebaseerd zijn op de betreffende search index - Da's cruciaal. Zie schermafdruk hiernaast met rode tekens. Het gaat om de specifieke index. Er is ook een soort generieke search-index-bron, maar da's niet voldoende
  • Je hebt vervolgens toegang tot alle velden die in de index zijn opgenomen
  • De velden in de view waarop gefilterd wordt, moeten van het type geïndexeerde velden zijn. Da's de link met search-database
  • Naast de geïndexeerde velden, kan het handig zijn om gebruik te maken van rendered nodes. Zie aparte hoofdstuk
  • De selectie die in de view wordt weergegeven, wordt gefilterd via Exposed Form
  • Zie bestaande implementaties voor details. Da's een stuk handiger dan 't hier uit te leggen.

Rendered nodes

Om gebruik te kunnen maken van rendered nodes, moet de Entity API-module (entity) zijn geïnstalleerd. Vervolgens is rendered nodes beschikbaar voor views die gebaseerd zijn op nodes, en nog meer zaken, maar niet voor views die gebaseerd zijn op een index. Dat lukt pas, als er aan meer voorwaarden is voldaan. In het bijzonder: Het moet ondubbelzinnig zijn, om wat voor entiteit het gaat. Bv. door de index te beperken tot nodes van het juist type. Dan gaat het daarna haast vanzelf.

Facetblokken weergeven

De blokken/controls om de resultaten te filteren, worden gegenereerd door de Facet API. Er moet aan een aantal voorwaarden zijn voldaan, voordat de blokken daadwerkelijk verschijnen:

  • Search-server & -index moeten zijn configureerd
  • Facetblokken worden alleen getoond op zoekpagina's. Geen zoekpagina's? Dan ook deze blokken niet, maar je krijgt geen foutmelding ofzo. Zie verderop voor details
  • De betreffende items moeten zijn geïndexeerd. Dat kun je zien door tijdens het indexeren de betreffende zoekpagina herhaaldelijke te verversen: Eén voor één verschijnen de blokken

Facetblokken configuren

Veel configuratie-vraagstukken zijn pas relevant zosnel de facetblokken verschijnen. Hierbij een bloemlezing:

  • Facetblokken werken standaard met een logische AND-functie: Hoe meer keuzes je maakt in facetblokken, hoe kleiner de resulterende verzameling objecten
  • Serverindex-velden: Als je kiest voor Fulltext, dan worden zoektermen uit elkaar getrokken en als losse objecten beschouwd en hoofdletters verloren gaan. string zorgt dat objecten niet worden opgesplitst
  • Numerieke velden correct sorteren? Kies Indexed value als sorteercriterium ipv. Display value
  • De module Better Exposed Filters (better_exposed_filters) biedt de mogelijkheid om checkboxes en radio buttons te gebruiken als controls
  • De module BEF Test Content (bef_test_content) genereert dummy-content om mee te testen.

Search-server instantiëren

Nieuwe server aangemaakt

Nieuwe server aanmaken: (Administration » Configuration » Search and metadata » Search API).

Voorbeeld:

  • Naam: faceted_search_server
  • Class: Database server - Geen andere classen enabled
  • Minimum word length: 1
  • Search on parts of a word: Ja (vanwege complexe product-aanduidingen)

Facetblokken weergeven

Display settings voor een facetblok: Search and metadata » Search API » View index » Facets » Configure Display » Global settings. Onder Search IDs staan de beschikbare zoekpagina's vermeld. In dit geval vermoedelijk alledrie maatwerk-views. Indien er geen geschikte zoekpagina's beschikbaar zijn, verschijnen de controls Display voor searches en Search IDs niet

Facetblokken worden slechts onder bepaalde voorwaarden weergegeven:

  • Op zoekpagina's [1]
  • Mbv. eigen view-blokken[2]
  • Door een willekeurige pagina via een search-blok om te fietsen tot een zoekpagina? [3]
  • Mbv. ajax [4].

Vermoedelijk de meest gangbare zoekpagina's voor Drupal Commerce sites: Views van het type Product display. Dit is de header van zo'n view:

$view = new view();
$view->name = 'zoek05';
$view->description = 'Product display';
$view->tag = 'default';
$view->base_table = 'search_api_index_product_display';
$view->human_name = 'zoek05';
$view->core = 7;
$view->api_version = '3.0';
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */

Het gaat om de regel search_api_index_product_display.

Enkele types views en of ze als zoekpagina worden aangemerkt:

* Default node index   Ja    Zie presentatie Drupalcon Munich, sheet 90. Ik weet niet wat 'default node index' is
* Product display      Ja
* Search index         Nee
* Search page          Nee
* Search server        Nee
* Product display      Nee

Zie ook

Bronnen

Search - Algemeen

Facet API - Algemeen

Er is weinig documentatie. Beautiful7mind, Drupalcon Munchen 2012 en Trellon zijn de enige genoemde bronnen, naast de minimale community documentation-pagina en de minieme projectpagina:

Facet-blokken plaatsen