Skip to content

docs(15.9): document the new 15.9 features - #565

Merged
marevol merged 12 commits into
mainfrom
docs/159-new-features
Oct 3, 2026
Merged

marevol merged 12 commits into
mainfrom
docs/159-new-features

Conversation

@marevol

@marevol marevol commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Documents the Fess 15.9 features that had no description yet. All changes are in the 15.9 (development) tree, in all seven languages (ja, en, de, es, fr, ko, zh-cn). Facts were taken from the fess source at the 15.9 head (config keys and defaults from fess_config.properties, screen names from the label bundles, API shapes from openapi-user.yaml).

Feature Source Pages
Search log analytics dashboard, CSV downloads, zero-hit drill-down, searches by role and group, AI Chat tab fess #3521, #3526, #3529, #3534 admin/searchlog-guide.rst (rewritten)
Generate related queries from search logs fess #3535 admin/relatedquery-guide.rst
Document report (duplicates, dormant documents) fess #3531 admin/docreport-guide.rst (new), admin/index.rst
owner / last_modifier fields fess #3528 user/search-field.rst
Recent searches fess #3516 api/api-search-history.rst (new)
Search result export fess #3519 api/api-export.rst (new)
User tags and the label kind fess #3536 admin/labeltype-guide.rst, api/api-tag.rst (new)
features.search_history / search_export / user_tag fess #3516, #3519, #3536 api/api-uiconfig.rst, api/index.rst
robots.txt per RFC 9309, Crawl-delay cap, 429/503 backoff, unavailable robots.txt, conditional GET fess #3513, fess-crawler #214–#216 config/rate-limiting.rst, admin/general-guide.rst
Kana variant and long vowel mark normalization fess #3532 admin/mapping-guide.rst
theme.index.frame.ancestors fess #3522 dev/theme-development.rst
fess-setup --repository file:/// and the plugin type check fess #3510, #3509 install/fess-setup.rst
chat_log.ndjson backup target fess #3534 admin/backup-guide.rst, api/admin/api-admin-backup.rst
OCR and files indexed before OCR was enabled fess #3520 config/crawler-ocr.rst

Not included

  • config/properties.rst is generated from fess_config.properties and still lacks the new keys. Regenerating it needs translations in each language's properties.po, so it is left for a separate change.
  • The OpenSearch version and reindex notes of install/upgrade.rst and install/prerequisites.rst are handled separately.

Checks

  • Every changed or new page was parsed with docutils (doctitle_xform=False): no new warnings compared with main, one top-level section per page, and no unrendered inline markup.
  • Every :doc: reference in the changed pages resolves to an existing file.

marevol added 12 commits October 3, 2026 22:12
The default index.backup.log.targets now includes chat_log.ndjson, the
AI chat usage log, so the backup screen and GET /api/admin/backup/files
offer 11 targets. Add it to the backup guide and to the API example.
With incremental crawling on, a re-crawl does not fetch a file whose
modification time has not changed, so files indexed before OCR was
turned on keep their old content. Add a note to the OCR page on how to
apply OCR to them.
…of fess-setup

- --repository accepts a file:/// URL naming a local copy of the Maven
  repository (the directory that corresponds to .../org/codelibs/fess/),
  for servers with no route to the Internet; the offline section points
  to it as an alternative to copying jars.
- install plugin accepts only the plugin types Fess loads and refuses
  any other name, fess-theme-* included, with exit code 2 before
  downloading anything.
The theme entry HTML sends frame-ancestors 'none' and X-Frame-Options:
DENY. The frame-ancestors value now comes from
theme.index.frame.ancestors; an empty value drops the directive, which
lets WebKit-based browsers show the blob: frames of a theme (PDF preview,
cached copy) while X-Frame-Options still keeps the page out of frames.
…l GET behavior

- Crawl-delay applies per origin, capped at 60 seconds; robots.txt is
  read per RFC 9309 (longest match, start URLs checked, disallowed URLs
  logged at INFO and not recorded as failure URLs).
- 429/503 responses are retried up to three times after Retry-After or
  an exponential wait of 10 seconds to 5 minutes.
- An unavailable robots.txt now keeps the origin out of the crawl after
  three retries; client.robotsTxtAllowOnUnavailable=true restores the
  earlier allow-all behavior.
- Incremental crawling sends a conditional GET (If-None-Match /
  If-Modified-Since) when the HEAD Last-Modified cannot decide, and a 304
  page is treated as unchanged.
…dled mapping

The bundled mapping.txt now also folds ゐ/ゑ, the remaining small kana,
ゝ/ゞ and the ヴ spellings, and a new prolonged_sound_mark_filter turns
dashes written after kana into ー. Describe what the bundled
dictionaries normalize and that an existing index needs a reindex with
"Reset Dictionaries" to use them.
Crawled files now carry the file owner (SMB, file system and FTP) and
the last modifier (the extracted last author, or the owner). List both
keyword fields on the field search page, with what fills them, example
queries and the two settings that turn them off.
The Related Query page has a "Generate from Search Logs" button that
turns frequent query refinements in recent search logs into related
queries. Describe how a refinement is found, the safeguards (guest
visible logs only, plain queries only, bad words, minimum sessions, per
virtual host, existing terms untouched, cache capacity), when the
button is unavailable and the related_query.generate.* settings.
The Search Log page is now an analytics dashboard. Rewrite the guide
for it: the period, comparison and access type filters; the Overview,
Queries, Clicks, Performance, Audience (including searches by role and
group) and AI Chat tabs; drilling from a zero-hit query into the
matching logs; CSV downloads of every report and of the filtered logs
(encoding, byte order mark and formula guard); and the log list with
its hit count filter.
System Info > Document Report lists groups of duplicate documents (by
the content signature computed at index time) and dormant documents not
modified for N days, optionally only those never opened from search
results, both narrowed by URL prefix and downloadable as CSV. Add a page
for it with its roles, limits, unavailable mappings and docreport.*
settings, and link it from the administrator guide.
A label now has a kind, label or tag. Logged-in users can tag search
results when user.tag.enabled is true; each tag is a label of the kind
tag whose permissions decide who sees it. Describe the Kind field and
how tags are stored, shared, merged by name, limited and reflected in
the index.
- GET /api/v2/search-history returns the logged-in user's recent
  searches (search.history.enabled, search.history.size).
- GET /api/v2/documents/export downloads search results as CSV or JSON
  (api.search.export*, off by default).
- GET/POST/DELETE /api/v2/documents/{docId}/tags list, add and remove
  user tags (user.tag.*, off by default).

Also list the search_history, search_export and user_tag flags of
/api/v2/ui/config and add the pages to the API guide.
@marevol marevol self-assigned this Oct 3, 2026
@marevol
marevol merged commit 93ededf into main Oct 3, 2026
2 checks passed
marevol added a commit that referenced this pull request Oct 4, 2026
This follows codelibs/fess#3551, which replaces the user tags that were
labels of the kind "tag" with per-user tags in the fess_config.tag_type
index, and replaces the tag documentation added in #565.

- api/api-tag.rst: the new endpoints (GET/POST /api/v2/tags, PUT/DELETE
  /api/v2/tags/{id}, GET/POST /api/v2/documents/{docId}/tags and DELETE
  /api/v2/documents/{docId}/tags/{id}) with their login and CSRF
  requirements, examples and errors; private and shared tags; the tags of
  search hits, the tag facet and fields.tag filtering; the delay until the
  per-minute log_aggregator job applies the queued changes; and the
  user.tag.* settings.
- admin/tagtype-guide.rst: a new page for the admin Tag screen, its fields,
  sharing, how changes reach documents through the queue and the
  tag_updater job, and notes for operators. It is listed after the label
  page in the administrator guide.
- admin/labeltype-guide.rst: back to its content before #565, without the
  Kind field and the user tag section.
- api/api-uiconfig.rst: features.user_tag describes the new feature.
- api/admin/api-admin-tagtype.rst: a new page for /api/admin/tagtype,
  listed after the label type API. Updates send seq_no and primary_term
  from GET setting/{id}; a stale pair or a name the owner already uses
  fails with a validation error.
- config/properties.rst and properties.po: only the rows the pull request
  changes are applied (user.tag.*, index.field.tag,
  page.tagtype.max.fetch.size, online.help.name.tagtype and the default
  of index.export.exclude.fields), rendered with the generator's own
  functions so the pages still pass --check.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant