1
0
Fork 0
arangodb/Documentation/Books/AQL/Functions/Fulltext.mdpp

75 lines
3.4 KiB
Plaintext

!CHAPTER Fulltext functions
AQL offers the following functions to filter data based on
[fulltext indexes](../../Manual/Indexing/Fulltext.html):
!SUBSECTION 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.
- **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:
```js
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: specifying *complete* 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.