Examples for Developer #11 Week of Coding Abhishek Lal B Wed, 08/16/2017 - 20:51
Last week, a client asked me to investigate the state of the Elasticsearch support in Drupal 8. They're using a decoupled architecture and wanted to know how—using only core and contrib modules—Drupal data could be exposed to Elasticsearch. Elasticsearch would then index that data and make it available to the site's presentation layer via the Elasticsearch Search API.
During my research, I was impressed by the results. Thanks to Typed Data API plus a couple of contributed modules, an administrator can browse the structure of the content in Drupal and select what and how it should be indexed by Elasticsearch. All of this can be done using Drupal's admin interface.
In this article, we will take a vanilla Drupal 8 installation and configure it so that Elasticsearch receives any content changes. Let’s get started!Downloading and starting Elasticsearch
We will begin by downloading and starting Elasticsearch 5, which is the latest stable release. Open https://www.elastic.co/downloads/elasticsearch and follow the installation instructions. Once you start the process, open your browser and enter http://127.0.0.1:9200. You should see something like the following screenshot:undefined
Now let’s setup our Drupal site so it can talk to Elasticsearch.Setting up Search API
At the time of this writing there is no available release for Elasticsearch Connector, so you will have to clone the repository and checkout the 8.x-5.x branch and follow the installation instructions. As for Search API, just download and install the latest stable version.Connecting Drupal to Elasticsearch
Next, let’s connect Drupal to the Elasticsearch server that we configured in the previous section. Navigate to Configuration > Search and Metadata > Elasticsearch Connector and then fill out the form to add a cluster:undefined
Click 'Save' and check that the connection to the server was successful:undefined
That’s it for Elasticsearch Connector. The rest of the configuration will be done using the Search API module.Configuring a search index
Search API provides an abstraction layer that allows Drupal to push content changes to different servers, whether that's Elasticsearch, Apache Solr, or any other provider that has a Search API compatible module. Within each server, search API can create indexes, which are like buckets where you can push data that can be searched in different ways. Here is a drawing to illustrate the setup:undefined
Now navigate to Configuration > Search and Metadata > Search API and click on Add server:undefined
Fill out the form to let Search API manage the Elasticsearch server:undefined
Click Save, then check that the connection was successful:undefined
Next, we will create an index in the Elasticsearch server where we will specify that we want to push all of the content in Drupal. Go back to Configuration > Search and Metadata > Search API and click on Add index:undefined
Fill out the form to create an index where content will be pushed by Drupal:undefined undefined undefined
Click Save and verify that the index creation was successful:undefined
Verify the index creation at the Elasticsearch server by opening http://127.0.0.1:9200/_cat/indices?v in a new browser tab:undefined
That’s it! We will now test whether Drupal can properly update Elasticsearch when the index should reflect content changes.Indexing content
Create a node and then run cron. Verify that the node has been pushed to Elasticsearch by opening the URL http://127.0.0.1:9200/elasticsearch_index_draco_elastic_index/_search, where elasticsearch_index_draco_elastic_index is obtained from the above screenshot:undefined
Success! The node has been pushed but only it’s identifier is there. We need to select which fields we do want to push to Elasticsearch via the Search API interface at Configuration > Search and Metadata > Search API > Our Elasticsearch index > Fields:undefined
Click on Add fields and select the fields that you want to push to Elasticsearch:undefined
Add the fields and click Save. This time we will use Drush to reset the index and index the content again:undefined
After reloading http://127.0.0.1:9200/elasticsearch_index_draco_elastic_index/_search, we can see the added(s) field(s):undefined Processing the data prior to indexing it
This is the extra ball: Search API provides a list of processors that will alter the data to be indexed to Elasticsearch. Things like transliteration, filtering out unpublished content, or case insensitive searching, are available via the web interface. Here is the list, which you can find by clicking Processors when you are viewing the server at Search API :undefined When you need more, extend from the APIs
Now that you have an Elasticsearch engine, it’s time to start hooking it up with your front-end applications. We have seen that the web interface of the Search API module saves a ton of development time, but if you ever need to go the extra mile, there are hooks, events, and plugins that you can use in order to fit your requirements. A good place to start is the Search API’s project homepage. Happy searching!Acknowledgements
- Mike Herchel and Andrew Berry for their technical reviews.
- Photo by Sad loser (Own work) [CC BY-SA 4.0], via Wikimedia Commons
The project we're documenting was one we worked on for Powdr Resorts, one of the largest ski operators in North America.
The first installment in the series was A Deep Dive into a Decoupled Drupal 8 Project.Tags: acquia drupal planet
Join us for Tour de Drupal Vienna
Cycling is a great way to travel, experience new things and meet like-minded people. Join us for Tour de Drupal Vienna and let’s cycle together to DrupalCon!Josef Dabernig Wed, 08/16/2017 - 15:54
In the afternoon at 2pm, we plan to leave Tulln and cycle the remaining 40 km to Vienna to finally arrive in Vienna.
To sum-up, the meeting points are:
- Sunday, 24 September: 7 - 8am in Krems at Cafe Conditorei Raimitz.
- Sunday, 24 September: 11am - 2pm in Tulln at the Webshapers office/beer garden.
- Sunday, 24 September: 5pm in Vienna in front of the big wheel at Kaiserwiese.
The arrival is planned for Sunday, 24 September at 5pm in front of the big wheel in Vienna at Kaiserwiese.
How to get there?
There are many cycling routes that lead to Vienna. We created a map that currently highlights roads from east and west along the Danube. Also, check out the EuroVelo routes, bessone summarized the interesting ones for Vienna.
If you just wanna join for the last day, it’s a 30-minute train ride from Vienna to Tulln or 1:10 from Vienna to Krems and you can bring your bike on the train. Check ÖBB to book your train ticket.
Convinced? Tell us you are coming!
- Use the #tourdedrupal hashtag on twitter.
- Sign-up via the doodle.
- Join the discussion on groups.drupal.org.
I was trying to set up a Drush install on a remote Ubuntu server, and for some reason if I run $ drush I get: -bash: /usr/bin/drush: No such file or directory
But if I run: $ php /usr/bin/drush it works just fine
Any advice, on how i can get it to run when I just type $ drush?submitted by /u/seedlio
Managing many sites - dozens to hundreds - is difficult. It’s costly, inefficient and causes inconsistency across your domains. The source of your problem - lack of the consistent governance required to manage your portfolio of sites - isn’t going away. Over time, more and more sites will come online, and all of those new sites will need to be maintained and managed.Language Undefined
Valuebound: How to push clean code by following coding standards effectively using git pre-commit hook?
Pushing clean codes is not every one cups of tea, it needs extensive knowledge and practice. Before a website go live, it needs to pass certain standards and checks in order to deliver quality experience. Certainly, a clean website is a demand of almost every client and it should be.
In this blog post, you will learn why we need to implement git pre-commit hook? how it works? Simultaneously, we will also attempt to implement working examples in order to have better understanding.
Why we need to implement git pre-commit hook
Any website going live should pass certain standards and checks. If the web is built on any framework, then these checks are mandatory. How to ensure all developers are committing clean code? One way is to do code review,…
Modal dialogs are incredibly useful on websites as they allow the user to do something without having to leave the web page they are on. Drupal 8 now has a Dialog API in core, which greatly reduces the amount of code you need to write to create a modal dialog. Dialogs in Drupal 8 leverage jQuery UI.
In the second part of this series on modal dialogs in Drupal 8, we are going to go a step further from last week by creating the modal in a custom module.
If you’ve ever used Alexa, it may seem like it must be extremely complicated to get her to respond like she does. However, if you have your content inside Drupal, it’s not terribly difficult to get her to utilize that data for your own custom Alexa skill. Let’s take a look at how to accomplish that.