site logo


High-Performance, Full-Featured Search Capability

Mojo Helpdesk sports a state of the art search engine very much like Google or Bing have. For example, you can perform term, phrase, field, boolean, wild, and fuzzy queries, allowing you to find specific information quickly and easily. Here is how it work.

How to search:

For a basic search, you can type a single word in the search field, such as




or you can type a string of words enclosed in double quotation marks such as


“server escalation”


Searching for a ticket ID is as easy as typing the ticket number:



More information about queries:

Wild Query

A wild query is a query using the pattern matching characters * and ?. * matches 0 or more characters while ? matches a single character.

Help* (matches: help, helping, helps, helped, etc.)

Help? (matches: helps)

5567* (matches 556711-22-3)</>

Note that this query can be quite time-consuming if not used carefully. In the example above there would be no problem, but you should be careful not to use the wild characters at the beginning of the query as the search will have to iterate through every term in that field.


Term Query

A term query is the most basic query of all and is what most of the other queries are built upon. The term consists of a single word. For example,


Note that the analyzer will be run on the term and if it splits the term in two then it will be turned into a phrase query. For example,


is equivalent to

"dave balmain"

which we will explain now…

Phrase Query

A phrase query is a string of terms surrounded by double quotes. For example you could write

"quick brown fox"

But if a "fast" fox is just as good as a quick one, you could use the | character to specify alternate terms.

"quick|speedy|fast brown fox"

What if we don‘t care what color the fox is? We can use the <> to specify a placeholder. For example,

"quick|speedy|fast <> fox"

This will match any word in between quick and fox. Alternatively we could set the "slop" for the phrase which allows a certain variation in the match of the phrase. The slop for a phrase is an integer indicating how many positions you are allowed to move the terms to get a match. To set the slop factor for a phrase you can type

"big house"~2

This would match "big house", "big red house", "big red brick house" and even "house big". That‘s right, you don‘t need to have the terms in order if you allow some slop in your phrases.

What if you want to search a specific ticket field? You‘ll be needing a…

Field Query

A field query is any field prefixed by <fieldname>:

For example, to search for all instances of the term "help" in field "title", you’d write


Or we can apply a field to a phrase:

title:"printer help"


Here is the list of all fields that can be included in the field query:

  • ticket_id – the ticket’s ID number 
  • title – the ticket’s title 
  • description – the ticket’s type (if enabled), custom fields, description, and all comments 
  • created_by_id – the ID of the ticket creator 
  • created_by_name – the name of the ticket creator 
  • created_by_email – the email of the ticket creator 
  • company_id – the company ID of the ticket creator 
  • company – the company name of the ticket creator 
  • assigned_to_id – the ID of the ticket assignee 
  • assigned_to_name – the name of the ticket assignee 
  • assigned_to_email – the email of the ticket assignee 
  • status_id – the ID of the ticket status (could be 10, 15, 20, 30, 40, 50, 60) 
  • status – the status name (could be ‘new’, ‘assigned’, ‘in progress’, ‘hold’, ‘information requested’, ‘solved’, ‘closed’) 
  • priority_id – the ID of the ticket priority (could be 10, 20, 30, 40) 
  • priority – the priority name (could be ‘emergency’, ‘urgent’, ‘normal’, ‘low’) 
  • ticket_queue_id – the ID of the ticket queue 
  • ticket_queue – the name of the ticket queue 
  • created_on – the date of ticket creation in the format YYYY-MM-DD hh:mm:ss 
  • updated_on – the date of ticket last update in the format YYYY-MM-DD hh:mm:ss

Now that we have a few types of queries, we‘ll need to glue them together with a …

Boolean Query

There are a couple of ways of writing Boolean queries. First, you can specify which terms are required, optional, or required not to exist (not).

  • ‘+’ or "REQ" can be used to indicate a required query. "REQ" must be surrounded by white space.
  • ‘-’, ‘!’ or "NOT" are used to indicate query that is required to be false. "NOT" must be surrounded by white space.
  • All other queries are optional if the above symbols are used.

Some examples;

+title:help -title:printer title:computer

  +description:chocolate +description:strawberries - description:wheat

You may also use the Boolean operators "AND", "&&", "OR", and "||". For example,

title:help AND NOT title:printer OR title:computer

  description:chocolate AND description:strawberries AND NOT  description:wheat



Range Query

A range query finds all documents with terms between the two query terms. This can be very useful in particular for dates. For example,

created_on:((>=2009-02-01 06:00:00) AND (<=2009-12-09 05:59:59))


or statuses:


status_id:(>=15 AND <=40)


Fuzzy Query

This is like the sloppy phrase query above, except you are now adding slop to a term. Basically it measures the Levenshtein distance between two terms and if the value is below the slop threshold, the term is a match. This time, though, the slop must be a float between 0 and 1.0, 1.0 being a perfect match and 0 being far from a match. The default is set to 0.5 so you don’t need to give a slop value if you don‘t want to. For example,



Note that this query can be time-consuming.