# Dejavu: The missing web UI for OpenSearch

With 3.6MM docker pulls till date, Dejavu is a popular data browser for Elasticsearch, and now, with the latest [3.6.0 release](https://github.com/appbaseio/dejavu/releases/tag/3.6.0), we've added first-class data browser support for OpenSearch as well.

![Screenshot 2022-03-28 at 8.06.41 PM.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1648478211011/EBHNZzsQx.png)

[Here's a live URL for you to try Dejavu out](https://dejavu.appbase.io/?appname=good-books-ds&url=https%3A%2F%2F04717bb076f7%3Abe54685e-db84-4243-975b-5b32ee241d31%40appbase-demo-ansible-abxiydt-arc.searchbase.io&mode=view). The search index used here only provides a read-access.



## What is OpenSearch?

OpenSearch is an Apache 2.0 fork of Elasticsearch 7.10.2, the most popular open-source search and analytics engine. It was created in 2021 and is maintained by AWS and the community. appbase.io partners with OpenSearch to provide the latest OpenSearch releases to our customers on Google Cloud and AWS. [Read more about OpenSearch](https://www.appbase.io/what-is/opensearch) and how it can be used to power different kinds of search experiences over here.

## Dejavu and its use-cases

Dejavu provides a modern web UI for Elasticsearch - a Google sheets like tabular view as well as a more familiar faceted search view into your search index, alias or data stream. It comes with options to configure the search results layout as well as support exporting of the search UI and the data itself in JSON and CSV formats.

Dejavu is complementary to a tool such as Kibana, or its derivative: OpenSearch Dashboards. It focuses on just one thing: allowing you to quickly visualize and test search relevance, is lightweight by design with a client-side architecture.

### Dejavu as a Data Browser

Dejavu as a data browser allows viewing and editing Elasticsearch index data. Sort through the data, find information visually, hide irrelevant data and make sense of all. With all the native data types Dejavu has. Global searchbar allows you to perform text search across your dataset.

Any filtered view that you create this way can be exported as a JSON or CSV file.

### Configure Search Relevance with Dejavu

In the Search Preview mode, you can configure facets, fields to search on and the results view. All of this is then exportable via CodeSandbox where you get a React codebase of the Search UI. This can be a great way to quickly prototype and test search relevancy. All of this can be done without writing code.


![Configuring Search Relevance with Dejavu](https://cdn.hashnode.com/res/hashnode/image/upload/v1648478070805/-CKHXMlp5.png)

Here's how the exported code looks like:

<iframe src="https://codesandbox.io/embed/epic-bird-1smtsq?fontsize=14&hidenavigation=1&theme=dark"
     style="width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;"
     title="epic-bird-1smtsq"
     allow="accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking"
     sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
   ></iframe>


## Deploy OpenSearch and Dejavu with Docker


Let's start by running OpenSearch with Docker.

```bash
docker run --name opensearch --rm -d -p 9200:9200 -e http.port=9200 \
-e discovery.type=single-node -e plugins.security.disabled=true \
-e http.max_content_length=10MB -e http.cors.enabled=true -e http.cors.allow-origin=\* \
-e http.cors.allow-headers=X-Requested-With,X-Auth-Token,Content-Type,Content-Length,Authorization \
-e http.cors.allow-credentials=true opensearchproject/opensearch:1.3.0
```

Here, I'm running this on my local machine, hence the use of `discovery.type=single-node` and `plugins.security.disabled=true` environments. This will allow OpenSearch to come online without applying any production bootstrap checks, assume a single-node setup and also not enable TLS cert based security.

Next, let's run Dejavu with Docker.

```bash
docker run -p 1358:1358 -d appbaseio/dejavu
```

That's all! You should see the Dejavu welcome screen by browsing to `localhost:1358` in your browser.


![Screenshot 2022-03-28 at 7.48.16 PM.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1648477126056/pZhsufkak.png)

> Note: Dejavu can also work with an OpenSearch cluster that's running in a cloud environment.

## Dejavu and Elasticsearch

Dejavu was originally created for Elasticsearch and continues to offer first-class support for Elasticsearch, including for the latest major versions 8.0 and above.

Here's how you can run Dejavu with Elasticsearch instead of OpenSearch:

```bash
docker run -d --rm --name elasticsearch -p 127.0.0.1:9200:9200 -e http.port=9200 -e discovery.type=single-node -e http.max_content_length=10MB -e http.cors.enabled=true -e http.cors.allow-origin=\* -e http.cors.allow-headers=X-Requested-With,X-Auth-Token,Content-Type,Content-Length,Authorization -e http.cors.allow-credentials=true -e network.publish_host=localhost -e xpack.security.enabled=false docker.elastic.co/elasticsearch/elasticsearch:8.1.1
```


```bash
docker run -p 1358:1358 -d appbaseio/dejavu
```

Dejavu also works with 7.x releases of Elasticsearch, but may not work well with older 5.x and 6.x releases.


## Get More with ReactiveSearch and appbase.io

Dejavu is built using [ReactiveSearch](https://github.com/appbaseio/reactivesearch), a UI components library for creating search experiences in React and Vue. You can use ReactiveSearch to take advantage of its scaffolding yet have full control over the form and functionality of your search UI.

appbase.io offers a hosted version of Dejavu which allows: configuring search relevance with more control, including configuring the search engine language, typo tolerance settings, synonyms, query rules, and pipelines. appbase.io also offers actionable search analytics and insights and works with any Elasticsearch or OpenSearch cluster out there. [Sign up for a free 14-days trial over here](https://dashboard.appbase.io/signup?utm_source=reactivesearch-blog&utm_medium=content).


