This sample application demonstrates:
- Searching for recipes by keywords, and
- Creating new recipes and saving them in Elasticsearch
This sample application deliberately uses plain PHP code (that is, no PHP frameworks), a little bit of Bootstrap CSS and even less jQuery. These minimalist choices are deliberate. We want to keep non-Elasticsearch-related code to a minimum so it as easy as possible to focus on the Elasticsearch-related code in this application.
-
Download and install PHP.
-
Download and unzip Elasticsearch.
$ wget 'https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.5.1.zip' $ unzip elasticsearch-1.5.1.zip
-
Start a 1-node Elasticsearch cluster.
$ cd elasticsearch-1.5.1 $ ./bin/elasticsearch # The process started by this command corresponds to a single Elasticsearch node
By default the node's REST API will be available at
http://localhost:9200
, unless port 9200 is already taken. In that case Elasticsearch will automatically choose another port. Read through the log messages emitted when you start the node, and look for a log message containinghttp
. In this message, look forbound_address
and note the port shown in the accompanying network address. -
Download the code in this repo and unzip it.
$ wget -O elastic-demo.zip 'https://github.com/elastic/demo/archive/master.zip' $ unzip elastic-demo.zip $ mv demo-master/recipe_search_simple . $ rm -rf demo-master elastic-demo.zip $ cd recipe_search_simple
-
Install application dependencies.
$ composer install
-
Seed Elasticsearch index with initial recipe data.
$ php data/seed.php
-
Start the application using PHP's built-in web server.
$ cd public $ php -S localhost:8000
By default this application will communicate with the Elasticsearch API at
http://localhost:9200
. If, in step 3, you noted a different port than 9200 being used, you will need to pass this information to the application when starting it up via an environment variable:$ APP_ES_PORT=<PORT> php -S localhost:8000
-
Open your web browser and visit
http://localhost:8000
.
The code in this project is organized as follows, starting at the root directory level (only relevant files and folders listed):
data/
— contains seed data and loader scriptseed.txt
— contains seed data in bulk index formatseed.php
— script to load seed data
public/
— contains files served by web servercss/
— contains the Bootstrap CSS filejs/
— contains the jQuery and this project's Javascript filesadd.php
— script to add a new recipe to Elasticsearchindex.php
— script to search for recipes in Elasticsearchview.php
— script to view a recipe from Elasticsearch
composer.json
— file describing application dependencies, including the Elasticsearch PHP language client