Skip to main content
More in Learn

Crystallize Elasticsearch JavaScript Example

An example service for integrating Elasticsearch with Crystallize in JavaScript.

https://github.com/crystallizeapi/crystallize-elasticsearch-example-js

Prerequisites

  • Node.js (>=8)
  • Docker (with docker-compose)

Getting Started

Clone the repository into your workspace and install the necessary dependencies.

git clone https://github.com/CrystallizeAPI/crystallize-elasticsearch-example-js.git
cd crystallize-elasticsearch-example-js

npm install
# or
yarn install

Now we need to set up our Elasticsearch instance. You can found out how to do that here.

Create a .env file in the root your project and add your Elasticsearch environment variables. If you are using the local Elasticsearch cluster provided by the docker-compose file, you only need to specify the node.

ES_NODE=http://localhost:9200

If you are using Elastic Cloud or have authentication on your Elasticsearch cluster you will need to specify the username and password as well.

ES_NODE=<your-elastic-deployment-url>
ES_USER=<your-elastic-deployment-user>
ES_PASS=<your-elastic-deployment-pass>

Running the Server

Being an example, this project exposes both queries for searching as well as mutations for indexing a tenant via GraphQL. You may wish to remove mutations from a publicly exposed endpoint.

You can run the server with either yarn start for production, or yarn dev for local development.

This will provide you with a playground available at http://localhost:4000/graphql. You can also call this endpoint via a `POST` request with a GraphQL body.

Indexing the Tenant

You can index your tenant's catalogue by running the bulkIndex mutation via GraphQL. As an example you can try indexing the teddy-bear-shop, or alternatively your own tenant.

mutation {
  bulkIndex(tenant: "teddy-bear-shop", language: "en") {
    success
    message
    executionTime
  }
}

Searching the Catalogue

You can search your catalogue using the productVariants query. You can view the full schema via the GraphQL playground with all the fields you can query, search and filter. For example:

query {
  productVariants(
    filter: { searchTerm: "kiwi" }
    orderBy: { field: PRICE, direction: DESC }
  ) {
    totalCount
    productVariants {
      variant {
        name
        price
        stock
      }
      product {
        name
      }
    }
  }
}
People showing thumbs up

Need further assistance?

Ask the Crystallize team or other enthusiasts in our slack community.

Join our slack community