Over the last 2 months (december 2015 and januari 2016), there’s been immense progress to Search API and Facets for drupal 8. Acquia offered to sponsor me and Thomas Seidl (drunken monkey) to spend some of our time working on the search ecosystem for Drupal 8. We were part of the D8 Module Acceleration Program. Thomas also posted some information about the work we did in a recent blogpost.

Most of this work can be seen in the latest alpha-12 release for Search API. We’ve also seen a compatible alpha-release for Search API Attachments. For Search API Solr, we need to get the testsuite running again before we can create a compatible alpha release, but the current HEAD should work with alpha-12. Facets is almost ready for it’s first alpha release, we first need to add a basic readme file before we’re allowed to create a first alpha release.

The biggest issues we’ve tackled trough the D8 MAP.

We made sure we’re explicit in the cacheability metadata we’re emitting with the help from the awesome Wim Leers. We decided that for now, search and facets will not be cacheable, but big pipe will be great solution to speed up the rendering of a search page. See the comment added in the FacetBlock class for more info about this.

We should also explicitly thank Xano for helping with the integration of Search API and Facets with the Plugin module.

We’ve made massive steps in the Views integration for Search API, by adding Views support for individual fields and adding Views filters for all indexed fields. These were the biggest hurdles to take for better views integration, that are still in the current list of Search API beta blockers.

We’ve also put a lot of work in cleaning up some of the code to make for a saner external API, such as the big index cleanup, the smaller field cleanup, and another index cleanup. A similar cleanup also happened for the facet entity.

The index’s behavior when a dependency is removed was also improved. We’re now not removing the index but trying to just remove the plugin. This should make for a better experience when working with contributed/custom datasources, processors, trackers, or backends.

One of the things we’re very proud of for the d8 version of Search API and Facets is the vastly improved test coverage, that makes us more confident in making changes. We’ve also improved the test quality of the previous 2 months as well. We’ve removed random strings from the tests, to reduce unwanted random failures, as well as moving away from simpletest to phpunit tests where possible. As well as adding a couple of new testcases.

For facets, we’ve had to make sure that the testbots picked up all the tests, and we added a bunch of extra coverage. We made sure to add extra regression tests when a bug was reported. We’ve also enabled strict config schema checking in the tests as well.

Most of these changes are only in code, we’ve also did a very big UI/UX change by creating a Views-like UI for adding/removing fields to an index. Feedback and improvements for that UI should go in this issue. On top of all that, we’ve added the ability to filter languages in the entity datasource and for backends to provide information about it’s availability.

We’ve added Facet source specific storage, this enabled us to make it easier to switch the url processor. The url handling was also improved by adding settings to change the url alias. At drupalcon Barcelona we decided to use the core context api for Facets’ block handling but we stepped away from that and moved to creating a block per facet recently.

We added a checkbox widget as well. Making sure we had 2 widgets was also a good testcase for our widget selection system. Another big issue was porting the facet dependencies from drupal 7’s facetapi_bonus module, as well as adding support for and/or selection.

We can still use some help.

If you want to help with creating an awesome search ecosystem in any way, please either ask around in the Search API IRC channel (#drupal-search-api on Freenode) or jump into one of the issue queues. We appreciate code as well as help in creating detailed issue reports and manual testing.