Fulltext functions
AQL offers the following functions to filter data based on fulltext indexes.
FULLTEXT()
FULLTEXT(coll, attribute, query, limit) → docArray
Return all documents from collection coll, for which the attribute attribute matches the fulltext search phrase query, optionally capped to limit results.
Note: the FULLTEXT() function requires the collection coll to have a fulltext index on attribute. If no fulltext index is available, this function will fail with an error at runtime. It doesn’t fail when explaining the query however.
- coll (collection): a collection
- attribute (string): the attribute name of the attribute to search in
- query (string): a fulltext search expression as described below
- limit (number, optional): if set to a non-zero value, it will cap the result to at most this number of documents
- returns docArray (array): an array of documents
FULLTEXT() is not meant to be used as an argument to FILTER
,
but rather to be used as the expression of a FOR
statement:
FOR oneMail IN FULLTEXT(emails, "body", "banana,-apple")
RETURN oneMail._id
query is a comma-separated list of sought words (or prefixes of sought words). To
distinguish between prefix searches and complete-match searches, each word can optionally be
prefixed with either the prefix:
or complete:
qualifier. Different qualifiers can
be mixed in the same query. Not specifying a qualifier for a search word will implicitly
execute a complete-match search for the given word:
-
FULLTEXT(emails, "body", "banana")
Will look for the word banana in the attribute body of the collection collection. -
FULLTEXT(emails, "body", "banana,orange")
Will look for both words banana and orange in the mentioned attribute. Only those documents will be returned that contain both words. -
FULLTEXT(emails, "body", "prefix:head")
Will look for documents that contain any words starting with the prefix head. -
FULLTEXT(emails, "body", "prefix:head,complete:aspirin")
Will look for all documents that contain a word starting with the prefix head and that also contain the (complete) word aspirin. Note: specifyingcomplete:
is optional here. -
FULLTEXT(emails, "body", "prefix:cent,prefix:subst")
Will look for all documents that contain a word starting with the prefix cent and that also contain a word starting with the prefix subst.
If multiple search words (or prefixes) are given, then by default the results will be AND-combined, meaning only the logical intersection of all searches will be returned. It is also possible to combine partial results with a logical OR, and with a logical NOT:
-
FULLTEXT(emails, "body", "+this,+text,+document")
Will return all documents that contain all the mentioned words. Note: specifying the+
symbols is optional here. -
FULLTEXT(emails, "body", "banana,|apple")
Will return all documents that contain either (or both) words banana or apple. -
FULLTEXT(emails, "body", "banana,-apple")
Will return all documents that contain the word banana, but do not contain the word apple. -
FULLTEXT(emails, "body", "banana,pear,-cranberry")
Will return all documents that contain both the words banana and pear, but do not contain the word cranberry.
No precedence of logical operators will be honored in a fulltext query. The query will simply be evaluated from left to right.