Unreleased
Empty for now.
1.3.2 (2025-11-27)
Changes
- Multi-value filter support in shell (#922): All shell search commands (SEARCH, EXPLAIN, BUCKET, BENCH, REVERSE) now support multi-value filters using parameter repetition (
TYPE street TYPE city) or pipe separator (TYPE street|city). - Housenumber filtering with multi-value filters (#921): Fixed housenumber type filtering logic to properly handle multi-value filters (e.g.,
type=housenumber&type=street) in bothsearch()andreverse()functions.
1.3.1 (2025-11-16)
Changes
- Multi-value filters improvements (#914, #915): The multi-value filter separator is now configurable via
FILTERS_MULTI_VALUE_SEPARATORparameter (default:' '). Set toNoneto disable separator parsing (multiple parameters still work). Additionally, the Python API (search(),reverse()) now accepts lists directly for multi-value filters (e.g.,type=["street", "city"]), while the HTTP layer handles string parsing. Single string values remain supported for backward compatibility. This improves code clarity and type safety while maintaining full HTTP API compatibility. - Temporary setuptools pin (#913): Added
setuptools < 81constraint to avoid deprecation warnings frompkg_resources. This temporary fix will be removed in the next major version when migrating away frompkg_resources.
1.3.0 (2025-11-02)
Breaking changes
- Update
redisto 6.4.0 andhiredisto 3.3.0 for Redis 8 compatibility - Minimum Redis version requirement increased from 5.0 to 7.2 (required by redis-py 6.x)
hiredisis now an optional dependency for performance optimization. Install withpip install addok[perf]to enable it. Addok will work without it but with slightly reduced Redis performance.
New features
- Multi-value filters with OR logic: Filters now support multiple values using the
+separator (e.g.,?type=street+city). This allows searching for documents matching any of the specified values. Multi-value filters work on both/search/and/reverse/endpoints. - Add
MAX_FILTER_VALUESconfiguration option to control the maximum number of values allowed in a multi-value filter (default: 10)
Changes
- Add Python 3.14 support
- Modernize Python packaging to use
pyproject.toml(PEP 621) - Development dependencies moved to optional
[dev]group: usepip install -e .[dev]for development setup - Enable multiprocessing on macOS: Use
spawncontext instead offorkto ensure proper Redis connection handling and avoid fork-safety issues on macOS. This makes macOS behavior consistent with production Linux environments. - Improved filter strategy for common tokens: When searching with only common tokens (high frequency) and filters, the system now intelligently compares filter size with token frequency to choose the most efficient strategy (Redis intersection vs manual scan). This can significantly improve performance when using filters that are more selective than the search tokens (e.g., searching
"la"withtype=localityor region-based filters).
1.2.1 (2025-08-26)
- Make results more deterministic (#899)
1.2.0 (2025-06-01)
- Add Python 3.12 and 3.13 support
- Update
falconto 4.0.2 - Update multiple small dependencies
- Some minor code improvements
- Drop Cython support
- Drop Python 3.7 and 3.8 support (end of life since 27 Jun 2023 and 7 Oct 2024)
1.1.2 (2024-01-26)
- Improve values handling in index and deindex methods (#798)
1.1.1
- Make
addok ngramswork again on macOS - Disable multiprocessing on macOS (affect only ngrams generation)
- Update
redisto 4.5.4 andhiredisto2.2.2
1.1.0
- Drop Python 3.6 support (end of life since 23 Dec 2021)
- Added
/healthendpoint to monitor Addok (#750)
1.1.0-rc2
- Added
load_csv_filebatch loader - Fixed
type=housenumberalso returning other results in some cases (#478) - Fixed ordering of housenumbers with non alpha-num chars (#656)
- Added
ID_FIELDto control which field is used as document_id config.SYNONYMS_PATHis nowconfig.SYNONYMS_PATHSand is a list to allow multiple files- Fixed non unique id across multiple docker sharing same Redis instance (#607)
- Added more variants for
latandlonparams and better control their values (#592) - Better ordering of candidates in case of autocomplete (#494)
- By default, use more common chars when building fuzzy variants
- Added python >= 3.8 compat
- Restore legacy scoring algorithm (#746): the new experimental scoring must be
activated manually, replacing
addok.helpers.results.score_by_ngram_distancewithaddok.helpers.results.score_by_str_distanceinSEARCH_RESULT_PROCESSORS_PYPATHS
1.1.0-rc1
- Faster new scoring algorithm (#431)
- Upgraded Falcon to 1.4.1
autocompleteandfuzzyare not adding any more their collectors automagically, instead they are now hard coded in the default config; if you haven't changedRESULTS_COLLECTORS_PYPATHSin your local config this should not impact you, otherwise, see "Upgrading" below.- Added a slow queries logger (see config for usage)
Upgrading to 1.1.0-rc1
If you have changed RESULTS_COLLECTORS_PYPATHS in your local config file, make
sure to add manually fuzzy and autocomplete ones. Check the
config doc for an example.
1.0.3
- make it work with python >= 3.8
- upgrade python deps
1.0.2
- allow to connect to Redis through unix socket
- fix reverse not honouring extra housenumber fields
- fix default BATCH_WORKERS values failing on systems with only one CPU
1.0.1
- Upgraded Falcon to 1.2.0
- Fix bug when search request is empty but lat and lon are given and valid
- Handle filters when doing a manual scan with Lua
- Allow to configure Redis password from config
1.0.0
The 1.0.0 has been a big rewrite, with main features:
- split in plugins
- allow for external storage of documents (in SQLite, PostgreSQL, etc.)
- use LUA scripting for performances
- less RAM consumption
- replaced Flask by Falcon for performances
- housenumbers are not indexed anymore (to gain RAM), they are only matched in result postprocessing
It contains many breaking changes. Best option when possible is to restart from scratch (see the tutorial) and reindex everything.
Breaking changes
PROCESSORS,INDEXERS, etc. have been renamed toPROCESSORS_PYPATHS,INDEXERS_PYPATHS, etc.HOUSENUMBERS_PROCESSORShave been removed- config must now be loaded by
from addok.config import config - removed
DEINDEXERS, nowINDEXERSmust point to python classes having bothindexanddeindexmethods - endpoints API changed
- by default, documents are now stored in a separate Redis database
- the key "id" is not required anymore in the loaded data and as such has been removed from the geojson Feature root.
Minor changes
- index multi values in filters
- add a "reset" command to reset all data (indexes and documents)
- added
quoteparameter for CSV endpoints (now in addok-csv plugin) - addok now tries to read config from
/etc/addok/addok.confas fallback SMALL_BUCKET_LIMITis now a setting
Also check the new FAQ section in the documentation.
0.5.0
- Expose housenumber parent name in result geojson
- add support for housenumber payload (#134)
- Fix clean_query being too much greedy for "cs" (#125
- also accept long for longitude
- replace "s/s" in French preprocessing
- fix autocomplete querystring casting to boolean
- Always add housenumber in label candidates if set (#120)
- make CSVView more hackable by plugins ([#116][https://github.com/addok/addok/issues/116))
0.4.0
- fix filters not taken into account in manual scan (#105)
- added experimental list support for document values
- Added MIN_EDGE_NGRAMS and MAX_EDGE_NGRAMS settings (#102)
- documented MAKE_LABELS setting
- Allow to pass functions as PROCESSORS, instead of path
- remove raw housenumbers returned in result properties
- do not consider filter if column is empty, in csv (#109)
- allow to pass lat and lon to define columns to be used for geo preference, in csv (#110)
- replace "s/" by "sur" in French preprocessing (#107)
- fix server failing when document was missing
importancevalue - refuse to load if
ADDOK_CONFIG_MODULEis given but not found - allow to set ADDOK_CONFIG_MODULE with command line parameter
--config - mention request parameters in geojson (#113)
0.3.1
- fix single character wrongly glued to housenumber (#99)
0.3.0
- use housenumber id as result id, when given (#38)
- shell: warn when requested id does not exist (#75)
- print filters in debug mode
- added filters to CSV endpoint (#67)
- also accept
lngas parameter (#88) - add
/get/endpoint (#87) - display distance in meters (not kilometers)
- add distance in single
/reverse/call - workaround python badly sniffing csv file with only one column (#90)
- add housenumber in csv results (#91)
- CSV: renamed "result_address" to "result_label" (#92)
- no BOM by default in UTF-8