--- title: 0.12.0 --- ## Syntax Changes 💡 ### JSON Syntax [#1811](https://github.com/paradedb/paradedb/pull/1811) introduced the ability to pass JSON objects directly to the search query, similar to Elasticsearch's Query DSL. The documentation has been updated to reflect this new query syntax option. ### Change to Index Naming Prior to `0.12.0`, the underlying Postgres index created with `paradedb.create_bm25` would have `_bm25_index` automatically appended. This made it possible to create indexes with the same name as the underlying table: ```sql CALL paradedb.create_bm25( index_name => 'mock_items', table_name => 'mock_items', ... ) ``` Unfortunately, appending `_bm25_index` to the index name was also a footgun to users who wanted to run `ALTER` or `DROP` over their Postgres index. In `0.12.0`, we no longer append `_bm25_index` to the Postgres index name and create a Postgres index with whatever name is passed into `index_name`. This means that the `index_name` must now be different than the `table_name`, which is standard for Postgres indexes. ## Performance Improvements 🚀 ### Fast Aggregates Our first milestone in accelerating aggregates like `COUNT` has landed in ParadeDB Enterprise. In this optimization, fields indexed as [fast fields](/documentation/indexing/fast_fields) are read in columnar batches instead of being read one-by-one, which drastically improves query times over large result sets. We're seeing a ~25X speedup on our test `COUNT` queries that return 100 million rows. The second milestone is to parallelize these queries, which we expect to deliver an additional ~10X speedup depending on the hardware of the host machine. This optimization will land in the next enterprise release. ### Improved Index Merge Policy Under the hood, the BM25 index is actually made up of mini indexes called segments. Because multiple threads read from segments in parallel during a search, having significantly more segments than number of available CPUs can negatively impact search performance. [#1883](https://github.com/paradedb/paradedb/pull/1883) changes the segment merge policy (which automatically runs on `INSERT` and `VACUUM`) to target the number of CPUs on the machine. This can be configured in the index settings. ## Stability Improvements 💪 - `0.11.1` introduced a regression where BM25 scores and snippets leaked memory. This has been fixed and we're seeing a 2X speedup over scoring/snippet queries. - [#1881](https://github.com/paradedb/paradedb/pull/1881) makes sure that `paradedb.create_index_memory_budget` does not exceed Tantivy's hard-coded 4GB limit. ## Docker Image 🐳 - The ParadeDB Docker image now ships with tags for all major versions of Postgres. They can be found [here](https://hub.docker.com/r/paradedb/paradedb/tags). - The ParadeDB Docker image now ships with `pgvector` version `0.8.0`. ## New Contributors 👋 - [@sandros94](https://github.com/sandros94) made their first contribution in [#1862](https://github.com/paradedb/paradedb/pull/1862). ## Full Changelog The full changelog is available [here](https://github.com/paradedb/paradedb/releases/tag/v0.12.0).