Overview of current search implementations

Hi everyone

I’m attempting to create an overview of current search implementations, mainly to sort my thoughts for deciding which one to use in ongoing projects. Furthermore, it might be helpful for others.

Flowpack.Elasticsearch

The “classic search stack” for Neos, based on Elasticsearch. Indexes all nodes (not only Document nodes) into Elasticsearch which can be an expensive task if there are many nodes. On the other hand, makes custom search or filtering tasks easy to implement because all nodes can be queried at a good performance.

Supports asset indexing.

Project status

  • Developed by the Neos community
  • Compatible with current versions of Neos and Elasticsearch
  • Considered by some as being too complex

Sandstorm.LightweightElasticsearch

The Neos 7/8 version is a more lightweight implementation of Elasticsearch, described by the authors as a “hack”. The Neos 9 version is a rewrite without Flowpack dependencies.

In contrast to Flowpack.Elasticsearch, it is only for fulltext search, meaning that document nodes are indexed as fulltext. Supports Elasticsearch 7+ and Opensearch 2.9+. Supports asset indexing.

Project status

  • Developed by Sandstorm and some individual contributors
  • Compatible with current versions and Neos 9
  • Seems to be a good choice if the requirement is to have a “normal” website search.

Sandstorm.KISSearch

Is a MySQL 8/MariaDB 10.6 WIP package for a “dependency-free” Neos search, using fulltext capabilities of SQL. Looks quite flexible, but still WIP.

Project status

  • Work in progress by Sandstorm
  • Compatible with current versions of Neos

Medienreaktor.Meilisearch

A Meilisearch implementation for Neos inspired by the Flowpack packages.

Does not support asset indexing (yet) and has no autocomplete/autosuggest because this is not yet supported by Meilisearch.

Project status

  • Developed by Medienreaktor
  • Compatible with current versions of Neos

Taking a decision

For a classic website and document search on a website, I would currently tend to using Sandstorm.LightweightElasticsearch. Its v9 version looks as if it would become the successor of the Flowpack packages. It is more lightweight (only indexing document nodes) which is good for performance and supports asset indexing.

What do you think? Did I forget other solutions?

4 Likes

Thanks @lorenzulrich for your overview. We had recently the same discussion and tried to understand how we could best implement some sophisticated search in Neos.

There is also the “SimpleSearch” Package: GitHub - Flowpack/Flowpack.SimpleSearch.ContentRepositoryAdaptor: Adaptor for the Neos CR, based on the SimpleSearch package

But we also wonder if there is any documentation about this “Content Repository Search API”, how to use it, what’s the idea about it, is this still the way to go to implement new search solutions/backends on this CR Search API, etc.

Do you have any information on that? Or maybe @sebobo or @sebastian ?

and we have found also this one: GitHub - patriceckhart/NeosRulez.NodeSearch: A Neos CMS plugin to add search functionality

This package uses the Neos NodeSearchService directly. Not sure if this is a recommended approach. I assume for smaller Neos installations this could be a simple solution.

Thanks for adding more information, @olibur. FYI, we decided to use Sandstorm.LightweightElasticsearch (with Opensearch) in Neos 8.3 because it is clear that this package has an upgrade path. It does what it says, i.e. it indexes your document nodes and offers search results with query parts.

1 Like