SlideShare a Scribd company logo
1 of 64
Download to read offline
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 API
• Search API Solr
• Facets
• More addon modules
• Custom code
• Introduction
• The big merge
• Influences
• Architecture
• Demo
• Open issues
• Introduction
• The big merge
• Influences
• Architecture
• Demo
• Open issues
• 2010 (d7)
• Generic and flexible search tools
• Different data
• Different search engines
• Different types of user interfaces
• Build Views of your entities including advanced
features like
• Keywords
• Facets
• Filters
• Sorts
• Introduction
• The big merge
• Influences
• Architecture
• Demo
• Open issues
• 3+ years in the making
• Crowdfunding campaign
• Drupal Dev Days & Drupalcon sprints
• Dedicated Sprint
• Google Summer of Code
• Apache Solr for Drupal 7 stays
• Apache Solr for Drupal 6 is dead
• Introduction
• The big merge
• Influences
• Architecture
• Demo
• Open issues
drupal.org
• Issue queues are powered with Search API Drupal
7 using the MySQL backend.
Community
…
• Introduction
• The big merge
• Influences
• Architecture
• Demo
• Open issues
• Search index
• Search server
• Views / Search API Pages
• Search Display?
• Introduction
• The big merge
• Influences
• Architecture
• Demo
• Open issues
https://www.youtube.com/watch?v=hA1N6Xggth8
• Introduction
• The big merge
• Influences
• Architecture
• Demo
• Open issues
• 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]
• Search API
• Search API Solr
• Facets
• More addon modules
• Custom code
• Introduction
• Demo
• Introduction
• Demo
• solarium/solarium
• Introduction
• Demo
https://www.youtube.com/watch?v=QAbnMCA2utI
• Search API
• Search API Solr
• Facets
• More addon modules
• Custom code
• Architecture
• Demo
• Todo
• Architecture
• Demo
• Todo
• FacetManager
• ::initFacets
• ::alterQuery
• ::build
• Processor
• Widget
• Url processor
• Architecture
• Demo
• Todo
https://www.youtube.com/watch?v=31p77ka8Tws
• Architecture
• Demo
• Todo
• 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
• Search API
• Search API Solr
• Facets
• More addon modules
• Custom code
• 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
• Facets
• Alpha 4
• Facets pretty paths
• Sandbox module available
• Search API
• Search API Solr
• Facets
• More addon modules
• Custom code
• Search API Processor.
• Drupalsearch_apiProcessorProcessorInterface
• Settings
• “ | ignore”
<?php



namespace Drupalcustom_codePluginsearch_apiprocessor;



use DrupalnodeNodeInterface;

use Drupalsearch_apiIndexInterface;

use Drupalsearch_apiProcessorProcessorPluginBase;



/**

* 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]);

}

}

}

}

}
<?php



namespace Drupalcustom_codePluginsearch_apiprocessor;



use DrupalnodeNodeInterface;

use Drupalsearch_apiIndexInterface;

use Drupalsearch_apiProcessorProcessorPluginBase;

/**

* 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]);

}

}

}

}

}
<?php



namespace Drupalcustom_codePluginsearch_apiprocessor;



use DrupalnodeNodeInterface;

use Drupalsearch_apiIndexInterface;

use Drupalsearch_apiProcessorProcessorPluginBase;



/**

* 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]);

}

}

}

}

}
<?php



namespace Drupalcustom_codePluginsearch_apiprocessor;



use DrupalnodeNodeInterface;

use Drupalsearch_apiIndexInterface;

use Drupalsearch_apiProcessorProcessorPluginBase;



/**

* 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();

if ($object instanceof NodeInterface) {

if (strpos($object->getTitle(), ' | ignore') !==
FALSE) {

unset($items[$item_id]);

}

}

}

}
}
Questions?
DRUPALCAMP GHENT
2016
GROW SOME IDEAS

More Related Content

What's hot

Alloy Tips & Tricks #TiLon
Alloy Tips & Tricks #TiLonAlloy Tips & Tricks #TiLon
Alloy Tips & Tricks #TiLonFokke Zandbergen
 
Yii, frameworks and where PHP is heading to
Yii, frameworks and where PHP is heading toYii, frameworks and where PHP is heading to
Yii, frameworks and where PHP is heading toAlexander Makarov
 
20141001 delapsley-oc-openstack-final
20141001 delapsley-oc-openstack-final20141001 delapsley-oc-openstack-final
20141001 delapsley-oc-openstack-finalDavid Lapsley
 
Digital Ocean Presentation - Ruby Dev Stackup - The Flatiron School
Digital Ocean Presentation - Ruby Dev Stackup - The Flatiron School Digital Ocean Presentation - Ruby Dev Stackup - The Flatiron School
Digital Ocean Presentation - Ruby Dev Stackup - The Flatiron School Elana Jacobs
 
Client-side Rendering with AngularJS
Client-side Rendering with AngularJSClient-side Rendering with AngularJS
Client-side Rendering with AngularJSDavid Lapsley
 
Contagion的Ruby/Rails投影片
Contagion的Ruby/Rails投影片Contagion的Ruby/Rails投影片
Contagion的Ruby/Rails投影片cfc
 
Hidden Treasures in Project Wonder
Hidden Treasures in Project WonderHidden Treasures in Project Wonder
Hidden Treasures in Project WonderWO Community
 
A Peek At The Future: Going Beyond JavaServer Faces 2.0 With RichFaces 4
A Peek At The Future: Going Beyond JavaServer Faces 2.0 With RichFaces 4A Peek At The Future: Going Beyond JavaServer Faces 2.0 With RichFaces 4
A Peek At The Future: Going Beyond JavaServer Faces 2.0 With RichFaces 4balunasj
 
Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011
Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011
Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011camp_drupal_ua
 
Quick Introduction to Sphinx and Thinking Sphinx
Quick Introduction to Sphinx and Thinking SphinxQuick Introduction to Sphinx and Thinking Sphinx
Quick Introduction to Sphinx and Thinking Sphinxhayesdavis
 
20140821 delapsley-cloudopen-public
20140821 delapsley-cloudopen-public20140821 delapsley-cloudopen-public
20140821 delapsley-cloudopen-publicDavid Lapsley
 
Test automation with selenide
Test automation with selenideTest automation with selenide
Test automation with selenideIsuru Madanayaka
 
Simplify AJAX using jQuery
Simplify AJAX using jQuerySimplify AJAX using jQuery
Simplify AJAX using jQuerySiva Arunachalam
 

What's hot (20)

Alloy Tips & Tricks #TiLon
Alloy Tips & Tricks #TiLonAlloy Tips & Tricks #TiLon
Alloy Tips & Tricks #TiLon
 
Yii, frameworks and where PHP is heading to
Yii, frameworks and where PHP is heading toYii, frameworks and where PHP is heading to
Yii, frameworks and where PHP is heading to
 
J query module1
J query module1J query module1
J query module1
 
20141001 delapsley-oc-openstack-final
20141001 delapsley-oc-openstack-final20141001 delapsley-oc-openstack-final
20141001 delapsley-oc-openstack-final
 
Digital Ocean Presentation - Ruby Dev Stackup - The Flatiron School
Digital Ocean Presentation - Ruby Dev Stackup - The Flatiron School Digital Ocean Presentation - Ruby Dev Stackup - The Flatiron School
Digital Ocean Presentation - Ruby Dev Stackup - The Flatiron School
 
Client-side Rendering with AngularJS
Client-side Rendering with AngularJSClient-side Rendering with AngularJS
Client-side Rendering with AngularJS
 
Contagion的Ruby/Rails投影片
Contagion的Ruby/Rails投影片Contagion的Ruby/Rails投影片
Contagion的Ruby/Rails投影片
 
Hidden Treasures in Project Wonder
Hidden Treasures in Project WonderHidden Treasures in Project Wonder
Hidden Treasures in Project Wonder
 
A Peek At The Future: Going Beyond JavaServer Faces 2.0 With RichFaces 4
A Peek At The Future: Going Beyond JavaServer Faces 2.0 With RichFaces 4A Peek At The Future: Going Beyond JavaServer Faces 2.0 With RichFaces 4
A Peek At The Future: Going Beyond JavaServer Faces 2.0 With RichFaces 4
 
Presentation
PresentationPresentation
Presentation
 
Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011
Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011
Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011
 
Quick Introduction to Sphinx and Thinking Sphinx
Quick Introduction to Sphinx and Thinking SphinxQuick Introduction to Sphinx and Thinking Sphinx
Quick Introduction to Sphinx and Thinking Sphinx
 
Drupal 8: Fields reborn
Drupal 8: Fields rebornDrupal 8: Fields reborn
Drupal 8: Fields reborn
 
Gaej For Beginners
Gaej For BeginnersGaej For Beginners
Gaej For Beginners
 
Jsp
JspJsp
Jsp
 
20140821 delapsley-cloudopen-public
20140821 delapsley-cloudopen-public20140821 delapsley-cloudopen-public
20140821 delapsley-cloudopen-public
 
Test automation with selenide
Test automation with selenideTest automation with selenide
Test automation with selenide
 
Django
DjangoDjango
Django
 
iOS for ERREST
iOS for ERRESTiOS for ERREST
iOS for ERREST
 
Simplify AJAX using jQuery
Simplify AJAX using jQuerySimplify AJAX using jQuery
Simplify AJAX using jQuery
 

Similar to State of search | drupalcamp ghent

SharePoint and jQuery Essentials
SharePoint and jQuery EssentialsSharePoint and jQuery Essentials
SharePoint and jQuery EssentialsMark Rackley
 
Drupal 8. Search API. Facets. Customize / combine facets
Drupal 8. Search API. Facets. Customize / combine facetsDrupal 8. Search API. Facets. Customize / combine facets
Drupal 8. Search API. Facets. Customize / combine facetsAnyforSoft
 
Icinga 2009 at OSMC
Icinga 2009 at OSMCIcinga 2009 at OSMC
Icinga 2009 at OSMCIcinga
 
SPTechCon DevDays - SharePoint & jQuery
SPTechCon DevDays - SharePoint & jQuerySPTechCon DevDays - SharePoint & jQuery
SPTechCon DevDays - SharePoint & jQueryMark Rackley
 
Web automation with #d8rules (European Drupal Days 2015)
Web automation with #d8rules (European Drupal Days 2015)Web automation with #d8rules (European Drupal Days 2015)
Web automation with #d8rules (European Drupal Days 2015)Eugenio Minardi
 
SPTechCon Boston 2015 - Utilizing jQuery in SharePoint
SPTechCon Boston 2015 - Utilizing jQuery in SharePointSPTechCon Boston 2015 - Utilizing jQuery in SharePoint
SPTechCon Boston 2015 - Utilizing jQuery in SharePointMark Rackley
 
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)Doris Chen
 
Staying Sane with Drupal NEPHP
Staying Sane with Drupal NEPHPStaying Sane with Drupal NEPHP
Staying Sane with Drupal NEPHPOscar Merida
 
An Introduction to Tornado
An Introduction to TornadoAn Introduction to Tornado
An Introduction to TornadoGavin Roy
 
以Vue開發電子商務網站
架構與眉角
以Vue開發電子商務網站
架構與眉角以Vue開發電子商務網站
架構與眉角
以Vue開發電子商務網站
架構與眉角Mei-yu Chen
 
Introducing the Seneca MVP framework for Node.js
Introducing the Seneca MVP framework for Node.jsIntroducing the Seneca MVP framework for Node.js
Introducing the Seneca MVP framework for Node.jsRichard Rodger
 
Introduction to Solr
Introduction to SolrIntroduction to Solr
Introduction to SolrJayesh Bhoyar
 
[Srijan Wednesday Webinars] Ruling Drupal 8 with #d8rules
[Srijan Wednesday Webinars] Ruling Drupal 8 with #d8rules[Srijan Wednesday Webinars] Ruling Drupal 8 with #d8rules
[Srijan Wednesday Webinars] Ruling Drupal 8 with #d8rulesSrijan Technologies
 
Decoupled Libraries for PHP
Decoupled Libraries for PHPDecoupled Libraries for PHP
Decoupled Libraries for PHPPaul Jones
 
Client-side MVC with Backbone.js
Client-side MVC with Backbone.js Client-side MVC with Backbone.js
Client-side MVC with Backbone.js iloveigloo
 
Client-side MVC with Backbone.js (reloaded)
Client-side MVC with Backbone.js (reloaded)Client-side MVC with Backbone.js (reloaded)
Client-side MVC with Backbone.js (reloaded)iloveigloo
 
Bye bye $GLOBALS['TYPO3_DB']
Bye bye $GLOBALS['TYPO3_DB']Bye bye $GLOBALS['TYPO3_DB']
Bye bye $GLOBALS['TYPO3_DB']Jan Helke
 
Introduction to Spring Boot.pdf
Introduction to Spring Boot.pdfIntroduction to Spring Boot.pdf
Introduction to Spring Boot.pdfShaiAlmog1
 
Data Access Options in SharePoint 2010
Data Access Options in SharePoint 2010Data Access Options in SharePoint 2010
Data Access Options in SharePoint 2010Rob Windsor
 

Similar to State of search | drupalcamp ghent (20)

SharePoint and jQuery Essentials
SharePoint and jQuery EssentialsSharePoint and jQuery Essentials
SharePoint and jQuery Essentials
 
Drupal 8. Search API. Facets. Customize / combine facets
Drupal 8. Search API. Facets. Customize / combine facetsDrupal 8. Search API. Facets. Customize / combine facets
Drupal 8. Search API. Facets. Customize / combine facets
 
Icinga 2009 at OSMC
Icinga 2009 at OSMCIcinga 2009 at OSMC
Icinga 2009 at OSMC
 
SPTechCon DevDays - SharePoint & jQuery
SPTechCon DevDays - SharePoint & jQuerySPTechCon DevDays - SharePoint & jQuery
SPTechCon DevDays - SharePoint & jQuery
 
Web automation with #d8rules (European Drupal Days 2015)
Web automation with #d8rules (European Drupal Days 2015)Web automation with #d8rules (European Drupal Days 2015)
Web automation with #d8rules (European Drupal Days 2015)
 
SPTechCon Boston 2015 - Utilizing jQuery in SharePoint
SPTechCon Boston 2015 - Utilizing jQuery in SharePointSPTechCon Boston 2015 - Utilizing jQuery in SharePoint
SPTechCon Boston 2015 - Utilizing jQuery in SharePoint
 
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
 
Staying Sane with Drupal NEPHP
Staying Sane with Drupal NEPHPStaying Sane with Drupal NEPHP
Staying Sane with Drupal NEPHP
 
An Introduction to Tornado
An Introduction to TornadoAn Introduction to Tornado
An Introduction to Tornado
 
以Vue開發電子商務網站
架構與眉角
以Vue開發電子商務網站
架構與眉角以Vue開發電子商務網站
架構與眉角
以Vue開發電子商務網站
架構與眉角
 
Introducing the Seneca MVP framework for Node.js
Introducing the Seneca MVP framework for Node.jsIntroducing the Seneca MVP framework for Node.js
Introducing the Seneca MVP framework for Node.js
 
20120816 nodejsdublin
20120816 nodejsdublin20120816 nodejsdublin
20120816 nodejsdublin
 
Introduction to Solr
Introduction to SolrIntroduction to Solr
Introduction to Solr
 
[Srijan Wednesday Webinars] Ruling Drupal 8 with #d8rules
[Srijan Wednesday Webinars] Ruling Drupal 8 with #d8rules[Srijan Wednesday Webinars] Ruling Drupal 8 with #d8rules
[Srijan Wednesday Webinars] Ruling Drupal 8 with #d8rules
 
Decoupled Libraries for PHP
Decoupled Libraries for PHPDecoupled Libraries for PHP
Decoupled Libraries for PHP
 
Client-side MVC with Backbone.js
Client-side MVC with Backbone.js Client-side MVC with Backbone.js
Client-side MVC with Backbone.js
 
Client-side MVC with Backbone.js (reloaded)
Client-side MVC with Backbone.js (reloaded)Client-side MVC with Backbone.js (reloaded)
Client-side MVC with Backbone.js (reloaded)
 
Bye bye $GLOBALS['TYPO3_DB']
Bye bye $GLOBALS['TYPO3_DB']Bye bye $GLOBALS['TYPO3_DB']
Bye bye $GLOBALS['TYPO3_DB']
 
Introduction to Spring Boot.pdf
Introduction to Spring Boot.pdfIntroduction to Spring Boot.pdf
Introduction to Spring Boot.pdf
 
Data Access Options in SharePoint 2010
Data Access Options in SharePoint 2010Data Access Options in SharePoint 2010
Data Access Options in SharePoint 2010
 

Recently uploaded

20240507 QFM013 Machine Intelligence Reading List April 2024.pdf
20240507 QFM013 Machine Intelligence Reading List April 2024.pdf20240507 QFM013 Machine Intelligence Reading List April 2024.pdf
20240507 QFM013 Machine Intelligence Reading List April 2024.pdfMatthew Sinclair
 
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service AvailableCall Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service AvailableSeo
 
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...nilamkumrai
 
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...SUHANI PANDEY
 
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...Delhi Call girls
 
💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋nirzagarg
 
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...SUHANI PANDEY
 
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...roncy bisnoi
 
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Bookingdharasingh5698
 
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Bookingdharasingh5698
 
Russian Call Girls Pune (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
Russian Call Girls Pune  (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...Russian Call Girls Pune  (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
Russian Call Girls Pune (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...SUHANI PANDEY
 
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRLLucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRLimonikaupta
 
2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs
2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs
2nd Solid Symposium: Solid Pods vs Personal Knowledge GraphsEleniIlkou
 
Trump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts SweatshirtTrump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts Sweatshirtrahman018755
 
"Boost Your Digital Presence: Partner with a Leading SEO Agency"
"Boost Your Digital Presence: Partner with a Leading SEO Agency""Boost Your Digital Presence: Partner with a Leading SEO Agency"
"Boost Your Digital Presence: Partner with a Leading SEO Agency"growthgrids
 
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdfpdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdfJOHNBEBONYAP1
 
Katraj ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For S...
Katraj ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For S...Katraj ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For S...
Katraj ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For S...tanu pandey
 

Recently uploaded (20)

20240507 QFM013 Machine Intelligence Reading List April 2024.pdf
20240507 QFM013 Machine Intelligence Reading List April 2024.pdf20240507 QFM013 Machine Intelligence Reading List April 2024.pdf
20240507 QFM013 Machine Intelligence Reading List April 2024.pdf
 
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service AvailableCall Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
Call Girls Ludhiana Just Call 98765-12871 Top Class Call Girl Service Available
 
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
 
valsad Escorts Service ☎️ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
valsad Escorts Service ☎️ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...valsad Escorts Service ☎️ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
valsad Escorts Service ☎️ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
 
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
 
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
 
💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
 
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...
 
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
 
6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...
6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...
6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...
 
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
 
Low Sexy Call Girls In Mohali 9053900678 🥵Have Save And Good Place 🥵
Low Sexy Call Girls In Mohali 9053900678 🥵Have Save And Good Place 🥵Low Sexy Call Girls In Mohali 9053900678 🥵Have Save And Good Place 🥵
Low Sexy Call Girls In Mohali 9053900678 🥵Have Save And Good Place 🥵
 
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
 
Russian Call Girls Pune (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
Russian Call Girls Pune  (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...Russian Call Girls Pune  (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
Russian Call Girls Pune (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
 
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRLLucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
 
2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs
2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs
2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs
 
Trump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts SweatshirtTrump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts Sweatshirt
 
"Boost Your Digital Presence: Partner with a Leading SEO Agency"
"Boost Your Digital Presence: Partner with a Leading SEO Agency""Boost Your Digital Presence: Partner with a Leading SEO Agency"
"Boost Your Digital Presence: Partner with a Leading SEO Agency"
 
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdfpdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
pdfcoffee.com_business-ethics-q3m7-pdf-free.pdf
 
Katraj ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For S...
Katraj ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For S...Katraj ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For S...
Katraj ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For S...
 

State of search | drupalcamp ghent

  • 1. DRUPALCAMP GHENT 2016 GROW SOME IDEAS The state of Search API in Drupal 8 Joris Vercammen | @borisson | @dazzletheweb
  • 2.
  • 4.
  • 5. • Search API • Search API Solr • Facets • More addon modules • Custom code
  • 6.
  • 7.
  • 8.
  • 9.
  • 10. • Search API • Search API Solr • Facets • More addon modules • Custom code
  • 11. • Introduction • The big merge • Influences • Architecture • Demo • Open issues
  • 12. • Introduction • The big merge • Influences • Architecture • Demo • Open issues
  • 13. • 2010 (d7) • Generic and flexible search tools • Different data • Different search engines • Different types of user interfaces
  • 14. • Build Views of your entities including advanced features like • Keywords • Facets • Filters • Sorts
  • 15. • Introduction • The big merge • Influences • Architecture • Demo • Open issues
  • 16. • 3+ years in the making • Crowdfunding campaign • Drupal Dev Days & Drupalcon sprints • Dedicated Sprint • Google Summer of Code
  • 17.
  • 18.
  • 19.
  • 20. • Apache Solr for Drupal 7 stays • Apache Solr for Drupal 6 is dead
  • 21. • Introduction • The big merge • Influences • Architecture • Demo • Open issues
  • 22. drupal.org • Issue queues are powered with Search API Drupal 7 using the MySQL backend.
  • 24.
  • 25. • Introduction • The big merge • Influences • Architecture • Demo • Open issues
  • 26. • Search index • Search server • Views / Search API Pages • Search Display?
  • 27. • Introduction • The big merge • Influences • Architecture • Demo • Open issues
  • 28.
  • 30. • Introduction • The big merge • Influences • Architecture • Demo • Open issues
  • 31. • 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]
  • 32. • Search API • Search API Solr • Facets • More addon modules • Custom code
  • 37.
  • 38.
  • 39.
  • 40.
  • 42. • Search API • Search API Solr • Facets • More addon modules • Custom code
  • 45. • FacetManager • ::initFacets • ::alterQuery • ::build
  • 48.
  • 51. • 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
  • 52. • Search API • Search API Solr • Facets • More addon modules • Custom code
  • 53. • 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
  • 54. • Facets • Alpha 4 • Facets pretty paths • Sandbox module available
  • 55.
  • 56. • Search API • Search API Solr • Facets • More addon modules • Custom code
  • 57.
  • 58. • Search API Processor. • Drupalsearch_apiProcessorProcessorInterface • Settings • “ | ignore”
  • 59. <?php
 
 namespace Drupalcustom_codePluginsearch_apiprocessor;
 
 use DrupalnodeNodeInterface;
 use Drupalsearch_apiIndexInterface;
 use Drupalsearch_apiProcessorProcessorPluginBase;
 
 /**
 * 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]);
 }
 }
 }
 }
 }
  • 60. <?php
 
 namespace Drupalcustom_codePluginsearch_apiprocessor;
 
 use DrupalnodeNodeInterface;
 use Drupalsearch_apiIndexInterface;
 use Drupalsearch_apiProcessorProcessorPluginBase;
 /**
 * 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]);
 }
 }
 }
 }
 }
  • 61. <?php
 
 namespace Drupalcustom_codePluginsearch_apiprocessor;
 
 use DrupalnodeNodeInterface;
 use Drupalsearch_apiIndexInterface;
 use Drupalsearch_apiProcessorProcessorPluginBase;
 
 /**
 * 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]);
 }
 }
 }
 }
 }
  • 62. <?php
 
 namespace Drupalcustom_codePluginsearch_apiprocessor;
 
 use DrupalnodeNodeInterface;
 use Drupalsearch_apiIndexInterface;
 use Drupalsearch_apiProcessorProcessorPluginBase;
 
 /**
 * 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();
 if ($object instanceof NodeInterface) {
 if (strpos($object->getTitle(), ' | ignore') !== FALSE) {
 unset($items[$item_id]);
 }
 }
 }
 }
}