Troubleshooting search error 409
When you use the advanced search feature in HTML files exported from Dr.Explain, you may encounter error messages with code 409 instead of search results.
A 409 error means the search index cannot be found. This usually happens when indexing is still in progress or when the path (or URL) to your HTML files is configured incorrectly.
Common causes
-
Indexing in progress: wait 5 minutes for indexing to complete.
-
Wrong environment variable name: use DREX_CONTENT_ROOT_XXX format (e.g., DREX_CONTENT_ROOT_EN).
-
Wrong mount path: the volume mount path doesn't match the actual location of HTML files.
-
Wrong URL path: if using URLs instead of paths, make sure the URL points to the folder (instead of an index file) and ends with a slash (e.g., https://example.com/docs/ not https://example.com/docs/index.htm).
If you just set up the search engine or recently uploaded new HTML files, the indexing process might still be running.
What to do:
-
Wait 5 minutes.
-
Try searching again.
If the error persists after 5 minutes: continue to Step 2.
This step requires access to your server via SSH and Docker.
Switch into the directory with docker-compose.yaml file (e.g. via cd /opt/drexplain-search) and run this command:
docker compose logs drexplain-search-backend-controller
Look for these messages:
-
"Configuration error: no content root folders..." — the backend cannot find your HTML files. Check that the DREX_CONTENT_ROOT_XXX environment variable is set correctly. Go to Step 3.
-
"Failed to load descriptor ID from ..." — the backend cannot load files from the URL you provided. Check that DREX_CONTENT_ROOT_XXX environment variable is set correctly. Go to Step 5.
-
"Search index doesn't exist, creating index" — indexing is in progress. Wait a few more minutes.
-
"Finished updating search index" — all data has been successfully sent to the search engine (Solr). Search engine might still require a few more minutes to prepare the search index for search requests. Wait a few minutes and try searching again.
If you see configuration errors: continue to Step 3.
This step requires access to your docker-compose.yaml file.
Check that your volume mount looks like this:
volumes:
- /path/to/your/html/files:/var/www/html:ro
Common mistakes:
-
The host path (/path/to/your/html/files) doesn't exist or is wrong.
-
The container path (/var/www/html) doesn't match what's in your environment DREX_CONTENT_ROOT_XXX variables.
-
The path contains symlinks (the de_search folder must be a real folder, not a symlink).
To verify the path exists, run this command:
ls -ld /path/to/your/html/files
You should see an entry with permissions and a creation / modification date.
If the path is wrong: correct the volume mount in docker-compose.yaml and restart the services:
docker compose down
docker compose up -d
Then wait 5 minutes and test again.
This step requires access to your docker-compose.yaml file.
The environment variable must be named correctly:
environment:
- DREX_CONTENT_ROOT_XXX=/var/www/html
Recommended naming: use pattern DREX_CONTENT_ROOT_XXX, where "XXX" part is a language code or a sequence of capital Latin letters A-Z, digits 0-9, and underscore.
If the name is wrong: correct it and restart the services:
docker compose down
docker compose up -d
Then wait 5 minutes and test again.
This step requires access to your docker-compose.yaml file.
The environment variable must be named correctly:
environment:
- DREX_CONTENT_ROOT_XXX=https://your-website.com/docs/
Common mistakes:
-
Naming variable DREX_CONTENT_ROOT-XXX instead of DREX_CONTENT_ROOT_XXX (using characters other than capital Latin letters A-Z, digits 0-9, and underscore).
-
Specifying the URL to the (index) file instead of the containing folder, e.g. https://your-website.com/docs/index.htm (incorrect) instead of https://your-website.com/docs/ (correct).
-
URL requires authentication. Configure web server where HTML files are uploaded to to provide free access to unauthorized HTTP requests initiated from the machine where the search backend is installed (e.g. via adding machine's IP address to the list of the users who can access files without authentication). Alternatively, provide the search backend access to HTML files via volume mount.
After making corrections, restart the services:
docker compose down
docker compose up -d
Then wait 5 minutes and test again.