Faceted search - Hoe het werkt (Drupal)
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
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 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
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
- Drupal Commerce 1.x - Installatie#Casus mrt. 2016 (3)
- Faceted search (Drupal) - casussen
- Rendered nodes (Drupal)
Bronnen
Search - Algemeen
- https://www.drupal.org/node/228411 - Search modules
- https://www.drupal.org/node/1250878 - Search API → Startpagina Community Documentation - Uitgebreide documentatie!
- http://drupal.stackexchange.com/questions/162336/how-can-i-make-the-list-of-exposed-filters-hide-options-with-no-existing-nodes
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:
- https://www.drupal.org/project/facetapi - Projectpagina
- https://www.drupal.org/node/1321166 - Facet API → Startpagina Community Documentation - Vrijwel leeg
- https://munich2012.drupal.org/sites/default/files/slides/Drupalcon%20Munich%202012_1.pdf - Presentatie Search API & Facet API
- https://beautiful7mind.wordpress.com/2013/03/10/step-by-step-how-to-implement-facet-search-on-data-in-drupal-7/ - Tutorial
- http://www.trellon.com/content/blog/apachesolr-and-facetapi - Genoemd op de projectpagina van Facet API
- https://www.drupal.org/project/facetapi_multiselect
- https://www.drupal.org/project/facetapi_bonus - Interessant
Facet-blokken plaatsen
- https://www.drupal.org/node/2017007 https://www.drupal.org/node/2017007 - Display facets on non-search pages - Belangrijkste bron voor dit onderwerp
- https://munich2012.drupal.org/sites/default/files/slides/Drupalcon%20Munich%202012_1.pdf - Sheets Drupalcon München 2012