Best NoSQL for filtering on multiple indexes/fields Best NoSQL for filtering on multiple indexes/fields elasticsearch elasticsearch

Best NoSQL for filtering on multiple indexes/fields


This is a variant on the popular question "what is the best product" :)

As always: this depends on your specific use case and goals. Database products (like all products) are always the result of trade-offs. So there does NOT exist a single product offering best performance, scalability and features. However there are many very good products for your use case.

Because your question is about Product Data and I am working with Product Data for more than 15 years, it will try to answer your question.

  • A document model is a perfect fit for Product Data. So for all use cases other than simple look up I would recommend a Document Store
  • If your use case concerns a single application and you are using the Java platform. I would recommend to use an embedded database. This makes things simpler and has a big performance advantage
  • If you need faceted search or other advance product search, i recommend you to use SOLR or Elastic Search
  • If you need a distributed system I recommend Elastic Search over SOLR
  • If you need Product recommendations based on reviews or other graph oriented algorithms, I recommend to use OrientDB or ArangoDB (or Neo4J, but in this case this would be my second choice)

Products we are using in Production or evaluated in depth for the use case you describe are

  • SOLR and ES. Both extremely well engineered products. Both (also ES) mature and stable products
  • Neo4J. Most mature graph database. Big advantage IMO is the awesome query language they use. Integrated Lucene engine. Very mature and well engineered product. Disadvantage is the fact that it is not a Document Graph but Property (key-value) Graph. Also it can be expensive
  • MongoDB. Our first experience with Document store. Very good product. Big advantage: excellent documentation, (by far) most popular NoSQL database
  • OrientDB and ArangoDB. Both support the Graph/Document paradigm. This are less known products, but very powerful. Because we are a Java based shop, our preference goes to OrientDB. OrientDB has a Lucene engine integrated (although the implementation is quite simple). ArangoDB on the other hand has very good documentation and a very smart and efficient storage format and finally the AQL is also very nice!
  • Performance: (tested with 11.43 mio Articles and 2.3 mio products). All products are very fast, especially SOLR and ES in this use case. Embedded OrientDB is also mind blowing fast for import and simple queries. For faceted search only the Search Servers provide real fast performance!
  • Bottom line: I would go for a Graph/Document store and/or Search Server (SOLR or ES). Because you mentioned "filtering" (I assume faceted search). The Search Server is the obvious first choice


OrientDB supports composite indexes on multiple fields. Example:

CREATE INDEX Product_idx ON Product (name, category, manufacturer) uniqueSELECT FROM INDEX:Product_idx WHERE key = ["Donald Knuth", "computer"]

You could also create a FULL-TEXT index by using all the power of Lucene as engine.


Aerospike is a key-value store, not an document database. A document database would do such field-level indexing and deeper searching into a nested object better. The secondary indexes in Aerospike currently (version 3.4.x) work on string and integer 'bins' (a concept similar to a document's field or a SQL table's column).

That said, the list and map complex types of Aerospike are being augmented with those capabilities, in work being done in this quarter. Keep an eye out for those changes in the upcoming releases. You'll be able to index and query on bins of type list and map.