-
Notifications
You must be signed in to change notification settings - Fork 15
Searching Inside Tickets
The ticket search used to answer one question: which ticket is this? You gave it a reference, an address or a subject, and it found the ticket.
It now answers a second, harder one: which tickets mention this? β looking inside every message and every note, not just the subject line. A phrase buried in the fourth reply of a two-year-old ticket is findable.
Open the search icon above the ticket list. The window has a new field:
Anywhere in the ticket β words from a message, a note, or a subject
Type into that box and press Enter. The three fields above it are unchanged and still do exactly what they did before, so nothing you already rely on has moved.
If you fill in both, the content search wins β it is the more specific thing you asked for.
Each result shows the ticket reference and subject as before, plus two new things:
- a snippet β the text around your match, so you can tell whether it is the ticket you wanted without opening it
- where it was found β subject, message or note, and how many other places in that ticket also matched
A ticket appears once, however many of its messages match. Without that, one long thread that mentions your word ten times would fill the entire first page.
| Type this | And you get |
|---|---|
printer jam |
Tickets containing both words, anywhere, in any order |
"printer jam" |
Only that exact phrase, those words in that order |
printer -jam |
Messages with printer but not jam |
Three things are worth knowing, because they explain results that would otherwise look wrong.
Word order never matters (unless you use quotes). Searching tower london finds "Tower of London".
Plurals are not automatic, but mostly work anyway. The database treats printer and printers as unrelated words. FreeITSM softens this by matching word beginnings, so printer does find printers β but printers will not find printer. If a search comes back thin, try the shorter form of the word.
Spelling has to be right. There is no "did you mean". A single transposed letter finds nothing.
Databases do not remember very short words β usually anything under three letters. If you search for one, FreeITSM tells you rather than pretending nothing matched, because an empty page would read as "that is not in your tickets", which would not be true.
Attachments. The text inside an attached PDF, Word document or spreadsheet is not searched. Filenames are not searched either. That is a separate and considerably harder piece of work β reading text out of arbitrary documents β and it is not built.
Text inside attachments. A PDF or a Word document attached to a ticket is not searched β only the message and note text. That is the next substantial piece of work.
Two steps, both genuinely one-off.
1. Create the index. Open System β Database Verification and run it. That creates the table the search uses.
2. Fill it with the tickets you already have. From a command line in the FreeITSM folder:
php scripts/search_backfill.php
It reads every ticket subject, message and note already in your database and makes them searchable. On a small installation this takes seconds. It is safe to run again at any time β re-running updates what is there rather than duplicating it.
From then on it looks after itself. New tickets, replies and notes are indexed as they happen, whether they arrive from an analyst, the self-service portal or by email, and a ticket you send to the trash drops out of the search immediately. You do not need to run anything on a schedule.
- After correcting the full-text settings (see the word-length warning below) β words that were skipped before need re-reading
- If you ever suspect the index has drifted; System β Debug Tools β D007 will tell you what it holds
- After restoring a database from a backup taken before the index existed
Run System β Debug Tools β D007 β Search corpus health. It takes about a second and ends in a plain-English verdict.
It is worth running once when you first set this up, not only when something looks wrong. The reason is that database search fails quietly: your database has settings that decide which words it will even remember, and when one of them is wrong nothing reports an error β searches simply come back empty for certain words while others work perfectly.
The most common example is a limit on how long a word can be. Some database installations ship with that set to ten characters, which makes words like authentication, configuration and workstation silently unfindable while shorter words work fine. WAMP on Windows ships this way. D007 spots it and tells you the one line to change.
Asked for in discussion #53.
- π οΈ Search corpus β Developer Guide β how it works underneath
- π Full-text search β the design β what was built, what was ruled out and why
FreeITSM β an open-source IT Service Management platform Β· github.com/edmozley/freeitsm Β· MIT licence
- Installation
- β° Scheduled tasks (cron jobs)
- Architecture
- AI Providers
- Internationalisation (i18n)
- Timezones & Time Handling
- Theming & Dark Mode
- β¨οΈ Command palette (βK)
- π Searching inside tickets
- π Attached documents
- MobileβFriendly
-
Security
- Layer 1 β which modules you can enter
- β³ π§© Module Access Control
- β³ π οΈ Module Access β Developer Guide
- Layer 2 β what you can administer
- β³ π Roles & Permissions
- β³ π οΈ Roles β Developer Guide
- β³ π€ Why capabilities are constants
- Layer 3 β the System module
- β³ π Admin Access Control
- Hardening
- β³ π Security review response 2026-08
- β³ π‘οΈ Security hardening 2026-08
- β³ π οΈ Security hardening 2026-08 β Developer Guide
- β³ π‘οΈ Round three β plain English
- β³ π οΈ Round three β Developer Guide
- Single Sign-On (SSO)
- ποΈ LDAP & Active Directory
- Browser Extension
- API Reference
-
π REST API β how it works
- β³ π« REST API: Tickets
- β³ π» REST API: Assets
- β³ π΄ REST API: Problems
- β³ π REST API: Changes
- β³ π REST API: Knowledge
- β³ β REST API: Tasks
- β³ ποΈ REST API: CMDB
- β³ π REST API: Contracts
- β³ ποΈ REST API: Calendar
- β³ πΏ REST API: Software
- β³ π¦ REST API: Service Status
- β³ βοΈ REST API: Morning Checks
- β³ π REST API: Forms
- β³ βοΈ REST API: Workflow
- β³ πΊοΈ REST API: Network Mapper
- β³ π§ Using the API docs page
- β³ π OpenAPI specification
- β³ β OpenAPI: kept correct
- β³ π οΈ Maintaining the catalogue
- Watchtower
-
Tickets
- β³ Mailbox Authentication
- β³ π€ Email send log
- β³ Basic IMAP mailboxes
- β³ Email rendering & images
- β³ SLA Management
- β³ WhatsApp channel
- β³ π¬ Web chat channel
- β³ π£ Slack channel
- β³ π Linking tickets
- β³ ποΈ Canned responses
- β³ βοΈ Limiting replies to particular senders
- β³ βοΈ Email signatures
- β³ π The public web address
- β³ π Raising a ticket for someone else
- β³ π Merging tickets
- β³ β Splitting tickets
- β³ β Selecting several tickets
- β³ π οΈ Snoozing tickets β Developer Guide
- β³ π₯ Collision detection
- β³ β±οΈ Time tracking
- Problem Management
- Tasks
- Assets
- Knowledge
- Change Management
- Calendar
- Morning Checks
- Reporting
- Software
- Forms
- Contracts
- Service Status
- π Notifications
- π¨ War Room
- Self-Service Portal
- LMS
- Process Mapper
- CMDB
- Network Mapper
- Workflows
- Issue trackers (Jira, Azure DevOps)
- System
-
Overview
- β³ π Progress tracker
- β³ Concepts & vocabulary
- β³ Email routing & mailboxes
- β³ Settings: global vs per-company
- β³ Users & self-service
- β³ Staff cross-company access
- β³ Worked examples
- β³ Pitfalls & gotchas
- β³ Scope: what it's for
- β³ π οΈ Developer Guide (make a module multi-company)
- β³ ποΈ Case study: CMDB (a linked graph)
- β³ π§ͺ Test harness (prove it's isolated)