search mobile facets autocomplete spellcheck crawler rankings weights synonyms analytics engage api customize documentation install setup technology content domains user history info home business cart chart contact email activate analyticsalt analytics autocomplete cart contact content crawling custom documentation domains email engage faceted history info install mobile person querybuilder search setup spellcheck synonyms weights engage_search_term engage_related_content engage_next_results engage_personalized_results engage_recent_results success add arrow-down arrow-left arrow-right arrow-up caret-down caret-left caret-right caret-up check close content conversions-small conversions details edit grid help small-info error live magento minus move photo pin plus preview refresh search settings small-home stat subtract text trash unpin wordpress x alert case_deflection advanced-permissions keyword-detection predictive-ai sso

Self-Managed App Search, Overview & Beta Status

Host Self-Managed App Search on your own infrastructure.


Self-Managed App Search brings all the goodness of App Search to your own infrastructure.

You now have two choices:

  1. Allow the Elastic team to manage your App Search service.

  2. Host it and scale it yourself.

The offering is currently in beta and can be downloaded free for experimentation.

We would love your feedback as you check things out: app-search-beta-feedback@elastic.co.

Visit the troubleshooting page for diagnostic help and known issues.

Installation

Supported platforms:

  • Linux: x86_64 only
  • MacOS X: High Sierra 10.13 or higher (64 bit only)
  • Windows: Not supported

Minimum hardware:

  • ~4GB of free RAM or 6GB if Elasticsearch is running on the same machine.
    • 2GB for App Server.
    • 2GB for Worker.
    • 50Mb for Filebeat and other processes.
  • 5GB of disk space available.

Dependencies:

Notices:

  • Elasticsearch must have at least a Basic license. A free Basic license is included when downloading Elasticsearch from Elastic.co, but not available within OSS versions like those acquired via a package manager like homebrew.
  • Minimum required Elasticsearch user permissions, defined as an Elasticsearch role (only needed when using Security features with your Elasticsearch cluster):
{
  "cluster" : [ "manage_index_templates", "monitor" ],
  "indices" : [
    {
      "names" : [ ".app-search-*" ],
      "privileges" : [ "manage", "write", "read" ]
    }
  ]
}
  • Dynamic Index Creation within Elasticsearch must be turned off for App Search indexes. See below for options.
  • Ensure that there are no pre-existing Elasticsearch indexes with: .app-search-*.
  • API endpoints URLs do not require a Host Identifier. API requests only require the host (localhost for local test deployments), port, and API suffix. All first party clients have been updated to consider the Host Identifier optional.

Running App Search

Ensure Elasticsearch is running:

bin/elasticsearch

If you can run curl http://localhost:9200/ to successfully reach Elasticsearch, then keep going!

Next, apply our recommended Elasticsearch cluster configuration.

To do so, choose one of the following methods:

  • Set a one time, persisting environment variable on boot to allow App Search to modify cluster settings: ALLOW_ES_SETTINGS_MODIFICATION=true

  • Add the following line to elasticsearch.yml or within your Elasticsearch cluster settings: action.auto_create_index: ".app-search-*-logs-*,-.app-search-*,+*"

  • (UNSUPPORTED) Set an environment variable to ignore our recommended cluster settings and continue at your own risk: DISABLE_ES_SETTINGS_CHECKS=true

Within the App Search directory, run...

bin/app-search

After it starts, visit http://localhost:3002.

The default login credentials are:

  • Email: app-search@example.com
  • Password: changeme

Be sure to change the password once you login! To do so, click on Settings under Account.

And now? Index some data, explore the Reference UI, perform search queries, tune relevance, fire up your imagination, and start building search.

Using the API

Example - An example search within Self-Managed App Search.
The Host Identifier is gone, but the API Key and Engine name remain.
curl -X POST 'https://localhost:3002/api/as/v1/engines/national-parks-demo/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer search-soaewu2ye6uc45dr8mcd54v8' \
-d '{
  "query": "everglade"
}'

Example - An example search within Self-Managed App Search.
The Host Identifier is gone, but the API Key and Engine name remain.
No Java example available, showing cURL
curl -X POST 'https://localhost:3002/api/as/v1/engines/national-parks-demo/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer search-soaewu2ye6uc45dr8mcd54v8' \
-d '{
  "query": "everglade"
}'

Example - An example search within Self-Managed App Search.
The Host Identifier is gone, but the API Key and Engine name remain.
No Node example available, showing cURL
curl -X POST 'https://localhost:3002/api/as/v1/engines/national-parks-demo/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer search-soaewu2ye6uc45dr8mcd54v8' \
-d '{
  "query": "everglade"
}'

Example - An example search within Self-Managed App Search.
The Host Identifier is gone, but the API Key and Engine name remain.
No Ruby example available, showing cURL
curl -X POST 'https://localhost:3002/api/as/v1/engines/national-parks-demo/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer search-soaewu2ye6uc45dr8mcd54v8' \
-d '{
  "query": "everglade"
}'

Example - An example search within Self-Managed App Search.
The Host Identifier is gone, but the API Key and Engine name remain.
No Python example available, showing cURL
curl -X POST 'https://localhost:3002/api/as/v1/engines/national-parks-demo/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer search-soaewu2ye6uc45dr8mcd54v8' \
-d '{
  "query": "everglade"
}'

Example - An example search within Self-Managed App Search.
The Host Identifier is gone, but the API Key and Engine name remain.
No Javascript example available, showing cURL
curl -X POST 'https://localhost:3002/api/as/v1/engines/national-parks-demo/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer search-soaewu2ye6uc45dr8mcd54v8' \
-d '{
  "query": "everglade"
}'

Configuration

You can find configuration options within config/env.sh.

The env.sh file presents environment variables which can be altered as you see fit.

You can adjust ports, Elasticsearch credentials, the logging level, and more.

Advanced Usage

Running Components Separately

The following run modes are not supported during the beta. But you might experiment...

If scale requires it, you can run App Search components separately.

There are two components that comprise an App Search deployment:

  • An Application/API server that provides the web UI and API.
  • A background worker that processes asynchronous requests like indexing, queries, and so on.

List all components:

bin/app-search --help

Run a single component:

bin/app-search COMPONENT_NAME

If you want to run the application server component - along with a Filebeat instance for collecting its logs:

bin/app-search app

Or, a background worker pool component could be started by running the following command:

bin/app-search worker

Single-Process Mode

An advanced mode is available for users that need to control and separately deploy specific processes:

bin/app-search --process PROCESS_NAME

WARNING: This mode is for operators with a deep understanding of internals and deployment procedures.


Thanks for trying out Self-Managed App Search. Please send us your beta feedback!