Autocomplete with java , Redis, Elastic Search , Mongo

marcg :

I have to implement an autocomplete with over 500,000 names which may later increase to over 4 million names.

Backend is a java REST web service call using Spring. Should I use MongoDB, Redis or Elasticsearch for storing and querying/searching the names?

Opster Elasticsearch Ninja :

This is a very important search use case and MongoDB and Redis are very good for key-based lookups and not use for Search purposes, while Elasticsearch is a distributed search engine, built specifically for such use-case.

Before choosing the system, you should know how your feature works internally, And below the consideration for choosing it.

non-functional requirements for your feature

  1. What would be the total no of search queries per second (QPS)?
  2. How frequently you would be updating the documents(ie names in your example).
  3. What is the SLA after names in updated and coming in the search result?
  4. SLA for your search results.

Some functional requirements.

  1. How autocomplete should look like, prefix, infix search on names?
  2. Minimum how many character user should type, before showing them the autocomplete results.
  3. How frequently the above requirements can change.

Elasticsearch indexed documents in the inverted index and works on tokens match(which can be easily customized to suit business requirements), hence super fast in searching. Redis and MongoDB are not having this structure internally and shouldn't be used for this use-case And you shouldn't have any doubt to choose Elasticsearch over these to implement Autocomplete.

As autocomplete is one of the most important features, there is an excellent blog, which you should read to understand different approaches offered by Elasticsearcg and their trade-off.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=336973&siteId=1