I want to do an advanced search, something similar to the one in [scryfall](https://scryfall.com/advanced) where I can use either syntax or buttons to search, using multiple filter and logical operators. I have difficulty knowing how to create the SQL query dynamically. If it's possible I'd like to see a guide on how to do something like that. If there isn't a guide a high level description on how to do this would be useful.
Off-the-shelf search engine server:
- [OpenSearch aka ElasticSearch](https://github.com/opensearch-project)
- [Apache Solr](https://lucene.apache.org/solr/): an enterprise search server with a powerful REST API
- [Sonic](https://github.com/valeriansaliou/sonic): Fast, lightweight & schema-less search backend. An alternative to Elasticsearch that runs on a few MBs of RAM
Libraries to build your own search engine server:
- Bleve & [tantivy](https://github.com/quickwit-oss/tantivy) are search engine projects, respectively written in Golang and Rust, inspired by Apache Lucene and its algorithms (e.g., tf-idf, short for term frequency-inverse document frequency). Such as Lucene, both are libraries to be used for any search project; however they are not ready-to-use APIs.
- [Apache Lucene](https://lucene.apache.org/): the full-text search library
> If you use Hibernate as your data access layer you can use [Hibernate Search](https://www.baeldung.com/hibernate-search)
> 1. you need a database to store and index the information.
> 2. you need an API to access the information.
> There are a million ways you could do this; pretty much any database will do, and there are a bunch of options for API’s. OpenSearch (AKA ElasticSearch) might be a good starting point. GraphQL is a powerful API option as well.