the state of search api in drupal 8
play

The state of Search API in Drupal 8 Joris Vercammen | @borisson | - PowerPoint PPT Presentation

DRUPALCAMP GHENT 2016 GROW SOME IDEAS The state of Search API in Drupal 8 Joris Vercammen | @borisson | @dazzletheweb http://drupalcamp.be/node/86 Search API Search API Solr Facets More addon modules Custom code Search


  1. DRUPALCAMP GHENT 2016 GROW SOME IDEAS The state of Search API in Drupal 8 Joris Vercammen | @borisson | @dazzletheweb

  2. http://drupalcamp.be/node/86

  3. • Search API • Search API Solr • Facets • More addon modules • Custom code

  4. • Search API • Search API Solr • Facets • More addon modules • Custom code

  5. • Introduction • The big merge • Influences • Architecture • Demo • Open issues

  6. • Introduction • The big merge • Influences • Architecture • Demo • Open issues

  7. • 2010 (d7) • Generic and flexible search tools • Different data • Different search engines • Different types of user interfaces

  8. • Build Views of your entities including advanced features like • Keywords • Facets • Filters • Sorts

  9. • Introduction • The big merge • Influences • Architecture • Demo • Open issues

  10. • 3+ years in the making • Crowdfunding campaign • Drupal Dev Days & Drupalcon sprints • Dedicated Sprint • Google Summer of Code

  11. • Apache Solr for Drupal 7 stays • Apache Solr for Drupal 6 is dead

  12. • Introduction • The big merge • Influences • Architecture • Demo • Open issues

  13. drupal.org • Issue queues are powered with Search API Drupal 7 using the MySQL backend.

  14. Community …

  15. • Introduction • The big merge • Influences • Architecture • Demo • Open issues

  16. • Search index • Search server • Views / Search API Pages • Search Display?

  17. • Introduction • The big merge • Influences • Architecture • Demo • Open issues

  18. https://www.youtube.com/watch?v=hA1N6Xggth8

  19. • Introduction • The big merge • Influences • Architecture • Demo • Open issues

  20. • Documentation and tests • Hierchical entity [#2625152] • Overhaul / Improve administration UI [#2387893] • Improve Fields UI [#2641388] • Config overrides for search entities [#2682369] • Fix test fails on php5.x [#2784849]

  21. • Search API • Search API Solr • Facets • More addon modules • Custom code

  22. • Introduction • Demo

  23. • Introduction • Demo

  24. • solarium/solarium

  25. • Introduction • Demo

  26. https://www.youtube.com/watch?v=QAbnMCA2utI

  27. • Search API • Search API Solr • Facets • More addon modules • Custom code

  28. • Architecture • Demo • Todo

  29. • Architecture • Demo • Todo

  30. • FacetManager • ::initFacets • ::alterQuery • ::build

  31. • Processor • Widget • Url processor

  32. • Architecture • Demo • Todo

  33. https://www.youtube.com/watch?v=31p77ka8Tws

  34. • Architecture • Demo • Todo

  35. • Implement pretty paths [#2677728] • Hierarchy [#2598304] • FacetSerializer has a hidden dependency on REST module [#2775963] • Bring facets up to date with Search API’s beta 1 [#2794745] • Documentation + tests

  36. • Search API • Search API Solr • Facets • More addon modules • Custom code

  37. • Search API • Beta 1 • Search API Page • Alpha 11 • Search API Solr • Alpha 6 • Search API Sorts • Alpha 1 • Elastic Search • Development version • Search API Autocomplete • Development version • Search API attachments • Alpha 4 • Search API Exclude Entity • Development version

  38. • Facets • Alpha 4 • Facets pretty paths • Sandbox module available

  39. • Search API • Search API Solr • Facets • More addon modules • Custom code

  40. • Search API Processor. • Drupal\search_api\Processor\ProcessorInterface • Settings • “ | ignore”

  41. 
 
 
 
 
 
 <?php 
 namespace Drupal\custom_code\Plugin\search_api\processor; 
 use Drupal\node\NodeInterface; 
 use Drupal\search_api\IndexInterface; 
 use Drupal\search_api\Processor\ProcessorPluginBase; 
 /** 
 * Excludes unpublished nodes from node indexes. 
 * 
 * @SearchApiProcessor( 
 * id = "ignore_nodes", 
 * label = @Translation("Ignore nodes for custom rules"), 
 * description = @Translation("Don't index nodes according to our custom rules."), 
 * stages = { 
 * "preprocess_index" = -50 
 * } 
 * ) 
 */ 
 class IgnoreNodes extends ProcessorPluginBase { 
 /** 
 * {@inheritdoc} 
 */ 
 public static function supportsIndex(IndexInterface $index) { 
 // Make sure that this processor only works on processors that have nodes 
 // indexed. 
 foreach ($index->getDatasources() as $datasource) { 
 if ($datasource->getEntityTypeId() == 'node') { 
 return TRUE; 
 } 
 } 
 return FALSE; 
 } 
 /** 
 * {@inheritdoc} 
 */ 
 public function preprocessIndexItems(array &$items) { 
 foreach ($items as $item_id => $item) { 
 $object = $item->getOriginalObject()->getValue(); 
 // Our nodes have " | ignore" in the title when they should be ignored and 
 // not indexed, this is hardcoded information because of the import from 
 // the external datasource. 
 if ($object instanceof NodeInterface) { 
 if (strpos($object->getTitle(), ' | ignore') !== FALSE) { 
 unset($items[$item_id]); 
 } 
 } 
 } 
 } 
 }

  42. 
 
 
 
 
 <?php 
 namespace Drupal\custom_code\Plugin\search_api\processor; 
 use Drupal\node\NodeInterface; 
 use Drupal\search_api\IndexInterface; 
 use Drupal\search_api\Processor\ProcessorPluginBase; 
 /** 
 * Excludes based on custom rule. 
 * 
 * @SearchApiProcessor( 
 * id = "ignore_nodes", 
 * label = @Translation("Ignore nodes for custom rules"), 
 * description = @Translation("Don't index nodes according to our custom rules."), 
 * stages = { 
 * "preprocess_index" = -50 
 * } 
 * ) 
 */ 
 class IgnoreNodes extends ProcessorPluginBase { 
 /** 
 * {@inheritdoc} 
 */ 
 public static function supportsIndex(IndexInterface $index) { 
 // Make sure that this processor only works on processors that have nodes 
 // indexed. 
 foreach ($index->getDatasources() as $datasource) { 
 if ($datasource->getEntityTypeId() == 'node') { 
 return TRUE; 
 } 
 } 
 return FALSE; 
 } 
 /** 
 * {@inheritdoc} 
 */ 
 public function preprocessIndexItems(array &$items) { 
 foreach ($items as $item_id => $item) { 
 $object = $item->getOriginalObject()->getValue(); 
 // Our nodes have " | ignore" in the title when they should be ignored and 
 // not indexed, this is hardcoded information because of the import from 
 // the external datasource. 
 if ($object instanceof NodeInterface) { 
 if (strpos($object->getTitle(), ' | ignore') !== FALSE) { 
 unset($items[$item_id]); 
 } 
 } 
 } 
 } 
 }

  43. 
 
 
 
 
 
 <?php 
 namespace Drupal\custom_code\Plugin\search_api\processor; 
 use Drupal\node\NodeInterface; 
 use Drupal\search_api\IndexInterface; 
 use Drupal\search_api\Processor\ProcessorPluginBase; 
 /** 
 * Excludes unpublished nodes from node indexes. 
 * 
 * @SearchApiProcessor( 
 * id = "ignore_nodes", 
 * label = @Translation("Ignore nodes for custom rules"), 
 * description = @Translation("Don't index nodes according to our custom rules."), 
 * stages = { 
 * "preprocess_index" = -50 
 * } 
 * ) 
 */ 
 class IgnoreNodes extends ProcessorPluginBase { 
 /** 
 * {@inheritdoc} 
 */ 
 public static function supportsIndex(IndexInterface $index){ 
 // Make sure that this processor only works on processors // that have nodes indexed. 
 foreach ($index->getDatasources() as $datasource) { 
 if ($datasource->getEntityTypeId() == 'node') { 
 return TRUE; 
 } 
 } 
 return FALSE; 
 } 
 /** 
 * {@inheritdoc} 
 */ 
 public function preprocessIndexItems(array &$items) { 
 foreach ($items as $item_id => $item) { 
 $object = $item->getOriginalObject()->getValue(); 
 // Our nodes have " | ignore" in the title when they should be ignored and 
 // not indexed, this is hardcoded information because of the import from 
 // the external datasource. 
 if ($object instanceof NodeInterface) { 
 if (strpos($object->getTitle(), ' | ignore') !== FALSE) { 
 unset($items[$item_id]); 
 } 
 } 
 } 
 } 
 }

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend