Query Operators

This text reference describes operator precedence and provides description, syntax, and examples for every Text query operator. The following topics are covered:

Operator Precedence

Operator precedence determines the order in which the components of a query expression are evaluated. Text query operators can be divided into two sets of operators that have their own order of evaluation. These two groups are described below as Group 1 and Group 2.

In all cases, query expressions are evaluated in order from left to right according to the precedence of their operators. Operators with higher precedence are applied first. Operators of equal precedence are applied in order of their appearance in the expression from left to right.

Group 1 Operators

Within query expressions, the Group 1 operators have the following order of evaluation from highest precedence to lowest:

  1. EQUIValence (=)

  2. NEAR (;)

  3. weight (*), threshold (>)

  4. MINUS (-)

  5. NOT (~)

  6. WITHIN

  7. AND (&)

  8. OR (|)

  9. ACCUMulate ( , )

Group 2 Operators and Characters

Within query expressions, the Group 2 operators have the following order of evaluation from highest to lowest:

  1. Wildcard Characters

  2. ABOUT

  3. stem ($)

  4. fuzzy (?)

  5. soundex (!)

Procedural Operators

Other operators not listed under Group 1 or Group 2 are procedural. These operators have no sense of precedence attached to them. They include the SQE and thesaurus operators.

Precedence Examples

Query Expression  Order of Evaluation 

w1 | w2 & w3 

(w1) | (w2 & w3) 

w1 & w2 | w3 

(w1 & w2) | w3 

?w1, w2 | w3 & w4 

(?w1), (w2 | (w3 & w4)) 

abc = def ghi & jkl = mno 

((abc = def) ghi) & (jkl=mno) 

dog and cat WITHIN body 

dog and (cat WITHIN body)  

In the first example, because AND has a higher precedence than OR, the query returns all documents that contain w1 and all documents that contain both w2 and w3.

In the second example, the query returns all documents that contain both w1 and w2 and all documents that contain w3.

In the third example, the fuzzy operator is first applied to w1, then the AND operator is applied to arguments w3 and w4, then the OR operator is applied to term w2 and the results of the AND operation, and finally, the score from the fuzzy operation on w1 is added to the score from the OR operation.

The fourth example shows that the equivalence operator has higher precedence than the AND operator.

The fifth example shows that the AND operator has lower precedence than the WITHIN operator.

Altering Precedence

Precedence is altered by grouping characters as follows:

ABOUT

Syntax

Syntax  Description 

about(phrase

In all languages, increases the number of relevant documents returned for the same query without the ABOUT operator.The phrase parameter can be a single word or a phrase, or a string of words in free text format.

In English, returns documents that contain concepts related to phrase.

The score returned is a relevance score. 

Examples

Single Words

To search for documents that are about soccer, use the following syntax:

'about(soccer)'

Phrases

You can further refine the query to include documents about soccer rules in international competition by entering the phrase as the query term:

'about(soccer rules in international competition)'



In this English example, Oracle returns all documents that have themes of soccer, rules, or international competition.

In terms of scoring, documents which have all three themes will generally score higher than documents that have only one or two of the themes.

Unstructured Phrases

You can also query on unstructured phrases, such as the following:

'about(japanese banking investments in indonesia)'

Combined Queries

You can use other operators, such as AND or NOT, to combine ABOUT queries with word queries.

For example, you can issue the following combined ABOUT and word query:

'about(dogs) and cat'



You can combine an ABOUT query with another ABOUT query as follows:

'about(dogs) not about(labradors)'

Case-Sensitivity

ABOUT queries give the best results when your query is formulated with proper case. This is because the normalization of your query is based on the knowledge catalog which is case-sensitive.

However, you need not type your query in exact case to obtain results from an ABOUT query. The system does its best to interpret your query. For example, if you enter a query of CISCO and the system does not find this in the knowledge catalog, the system might use Cisco as a related concept for look-up.

ACCUMulate ( , )

Use the ACCUM operator to search for documents that contain at least one occurrence of any of the query terms. The accumulate operator ranks documents according to the total term weight of a document.

Syntax

Syntax  Description 

term1,term2

term1 accum term2 

Returns documents that contain term1 or term2. Ranks documents according to document term weight, with the highest scores assigned to documents that have the highest total term weight. 

Examples

The following example returns documents that contain either soccer, Brazil, or cup and assigns the highest scores to the documents that contain all three terms:

'soccer, Brazil, cup'



The following example also returns documents that contain either soccer, Brazil, or cup. However, the weight operator ensures that documents with Brazil score higher than documents that contain only soccer and cup.

'soccer, 3*Brazil, cup'

AND (&)

Use the AND operator to search for documents that contain at least one occurrence of each of the query terms.

Syntax

Syntax  Description 

term1&term2

term1 and term2 

Returns documents that contain term1 and term2. Returns the minimum score of its operands. All query terms must occur; lower score taken. 

Examples

To obtain all the documents that contain the terms blue and black and red, issue the following query:

'blue & black & red'

Broader Term (BT, BTG, BTP, BTI)

Use the broader term operators (BT, BTG, BTP, BTI) to expand a query to include the term that has been defined in a thesaurus as the broader or higher level term for a specified term. They can also expand the query to include the broader term for the broader term and the broader term for that broader term, and so on up through the thesaurus hierarchy.

Syntax

Syntax  Description 

BT(term[(qualifier)][,level][,thes]) 

Expands a query to include the term defined in the thesaurus as a broader term for term

BTG(term[(qualifier)][,level][,thes]) 

Expands a query to include all terms defined in the thesaurus as a broader generic terms for term

BTP(term[(qualifier)][,level][,thes]) 

Expands a query to include all the terms defined in the thesaurus as broader partitive terms for term

BTI(term[(qualifier)][,level][,thes]) 

Expands a query to include all the terms defined in the thesaurus as broader instance terms for term

term

Specify the operand for the broader term operator. Oracle expands term to include the broader term entries defined for the term in the thesaurus specified by thes. The number of broader terms included in the expansion is determined by the value for level.

qualifier

Specify a qualifier for term, if term is a homograph (word or phrase with multiple meanings, but the same spelling) that appears in two or more nodes in the same hierarchy branch of thes.

If a qualifier is not specified for a homograph in a broader term query, the query expands to include the broader terms of all the homographic terms.

level

Specify the number of levels traversed in the thesaurus hierarchy to return the broader terms for the specified term. For example, a level of 1 in a BT query returns the broader term entry, if one exists, for the specified term. A level of 2 returns the broader term entry for the specified term, as well as the broader term entry, if one exists, for the broader term.

The level argument is optional and has a default value of one (1). Zero or negative values for the level argument return only the original query term.

thes

Specify the name of the thesaurus used to return the expansions for the specified term. The thes argument is optional and has a default value of DEFAULT. A thesaurus named DEFAULT must exist in the thesaurus tables if you use this default value.

Examples

The following query returns all documents that contain the term tutorial or the BT term defined for tutorial in the DEFAULT thesaurus:

'BT(tutorial)

Broader Term Operator on Homographs

If machine is a broader term for crane (building equipment) and bird is a broader term for crane (waterfowl) and no qualifier is specified for a broader term query, the query

BT(crane)



expands to:

'{crane} or {machine} or {bird}'



If waterfowl is specified as a qualifier for crane in a broader term query, the query

BT(crane{(waterfowl)})



expands to the query:

'{crane} or {bird}'


Note:

When specifying a qualifier in a broader or narrower term query, the qualifier and its notation (parentheses) must be escaped, as is shown in this example. 


EQUIValence (=)

Use the EQUIV operator to specify an acceptable substitution for a word in a query.

Syntax

Syntax  Description 

term1=term2

term1 equiv term2 

Specifies that term2 is an acceptable substitution for term1. Score calculated as the sum of all occurrences of both terms. 

Examples

The following example returns all documents that contain either the phrase alsatians are big dogs or labradors are big dogs:

'labradors=alsatians are big dogs'

fuzzy (?)

Use the fuzzy (?) operator to expand queries to include words that are spelled similarly to the specified term. This type of expansion is helpful for finding more accurate results when there are frequent misspellings in the documents in the database.

Unlike stem expansion, the number of words generated by a fuzzy expansion depends on what is in the index; results can vary significantly according to the contents of the index.

Syntax

Syntax  Description 

?term 

Expands a query to include all terms with similar spellings as the specified term. 

Examples

Input  Expands To 

?cat 

cat cats calc case 

?feline 

feline defined filtering 

?apply 

apply apple applied April 

?read 

lead real 

MINUS (-)

Use the MINUS operator to search for documents that contain one query term and you want the presence of a second query term to cause the document to be ranked lower. The MINUS operator is useful for lowering the score of documents that contain unwanted noise terms.

Syntax

Syntax  Description 

term1-term2

term1 minus term2 

Returns documents that contain term1. Calculates score by subtracting occurrences of term2 from occurrences of term1

Examples

Suppose a query on the term cars always returned high scoring documents about Ford cars. You can lower the scoring of the Ford documents by using the expression:

'cars - Ford'



In essence, this expression returns documents that contain the term cars and possibly Ford; however, the score for a returned document is the number of occurrences of cars minus the number of occurrences of Ford. If a document does not contain any occurrences of the term Ford, no value is subtracted from the score.

Narrower Term (NT, NTG, NTP, NTI)

Use the narrower term operators (NT, NTG, NTP, NTI) to expand a query to include all the terms that have been defined in a thesaurus as the narrower or lower level terms for a specified term. They can also expand the query to include all of the narrower terms for each narrower term, and so on down through the thesaurus hierarchy.

Syntax

Syntax  Description 

NT(term[(qualifier)][,level][,thes]) 

Expands a query to include all the lower level terms defined in the thesaurus as narrower terms for term. 

NTG(term[(qualifier)][,level][,thes]) 

Expands a query to include all the lower level terms defined in the thesaurus as narrower generic terms for term. 

NTP(term[(qualifier)][,level][,thes]) 

Expands a query to include all the lower level terms defined in the thesaurus as narrower partitive terms for term

NTI(term[(qualifier)][,level][,thes]) 

Expands a query to include all the lower level terms defined in the thesaurus as narrower instance terms for term

term

Specify the operand for the narrower term operator. term is expanded to include the narrower term entries defined for the term in the thesaurus specified by thes. The number of narrower terms included in the expansion is determined by the value for level.

qualifier

Specify a qualifier for term, if term is a homograph (word or phrase with multiple meanings, but the same spelling) that appears in two or more nodes in the same hierarchy branch of thes.

If a qualifier is not specified for a homograph in a narrower term query, the query expands to include all of the narrower terms of all homographic terms.

level

Specify the number of levels traversed in the thesaurus hierarchy to return the narrower terms for the specified term. For example, a level of 1 in an NT query returns all the narrower term entries, if any exist, for the specified term. A level of 2 returns all the narrower term entries for the specified term, as well as all the narrower term entries, if any exist, for each narrower term.

The level argument is optional and has a default value of one (1). Zero or negative values for the level argument return only the original query term.

thes

Specify the name of the thesaurus used to return the expansions for the specified term. The thes argument is optional and has a default value of DEFAULT. A thesaurus named DEFAULT must exist in the thesaurus tables if you use this default value.

Examples

The following query returns all documents that contain either the term cat or any of the NT terms defined for cat in the DEFAULT thesaurus:

'NT(cat)'



The following query returns all documents that contain either fairy tale or any of the narrower instance terms for fairy tale as defined in the DEFAULT thesaurus:

'NTI(fairy tale)'



That is, if the terms cinderella and snow white are defined as narrower term instances for fairy tale, Oracle returns documents that contain fairy tale, cinderella, or snow white.

NEAR (;)

Use the NEAR operator to return a score based on the proximity of two or more query terms. Oracle returns higher scores for terms closer together and lower scores for terms farther apart in a document.


Note:

The NEAR operator works with only word queries. You cannot use NEAR in ABOUT queries. 


Syntax

Syntax 

NEAR((word1, word2,..., wordn) [, max_span [, order]]) 

word1-n

Specify the terms in the query separated by commas. The query terms can be single words or phrases.

max_span

Optionally specify the size of the biggest clump. The default is 100. Oracle returns an error if you specify a number greater than 100.

A clump is the smallest group of words in which all query terms occur. All clumps begin and end with a query term.

For near queries with two terms, max_span is the maximum distance allowed between the two terms. For example, to query on dog and cat where dog is within 6 words of cat, issue the following query:

'near((dog, cat), 6)'

order

Specify TRUE for Oracle to search for terms in the order you specify. The default is FALSE.

For example, to search for the words monday, tuesday, and wednesday in that order with a maximum clump size of 20, issue the following query:

'near((monday, tuesday, wednesday), 20, TRUE)'


Note:

To specify order, you must always specify a number for the max_span parameter. 


Oracle might return different scores for the same document when you use identical query expressions that have the order flag set differently. For example, Oracle might return different scores for the same document when you issue the following queries:

'near((dog, cat), 50, FALSE)'

'near((dog, cat), 50, TRUE)'

NOT (~)

Use the NOT operator to search for documents that contain one query term and not another.

Syntax

Syntax  Description 

term1~term2

term1 not term2 

Returns documents that contain term1 and not term2

Examples

To obtain the documents that contain the term animals but not dogs, use the following expression:

'animals ~ dogs'



Similarly, to obtain the documents that contain the term transportation but not automobiles or trains, use the following expression:

'transportation not (automobiles or trains)'


Note:

The NOT operator does not affect the scoring produced by the other logical operators. 


OR (|)

Use the OR operator to search for documents that contain at least one occurrence of any of the query terms.

Syntax

Syntax  Description 

term1|term2

term1 or term2 

Returns documents that contain term1 or term2. Returns the maximum score of its operands. At least one term must exist; higher score taken. 

Examples

For example, to obtain the documents that contain the term cats or the term dogs, use either of the following expressions:

'cats | dogs'

'cats OR dogs'

Preferred Term (PT)

Use the preferred term operator (PT) to replace a term in a query with the preferred term that has been defined in a thesaurus for the term.

Syntax

Syntax  Description 

PT(term[,thes]) 

Replaces the specified word in a query with the preferred term for term

term

Specify the operand for the preferred term operator. term is replaced by the preferred term defined for the term in the specified thesaurus. However, if no PT entries are defined for the term, term is not replaced in the query expression and term is the result of the expansion.

thes

Specify the name of the thesaurus used to return the expansions for the specified term. The thes argument is optional and has a default value of DEFAULT. As a result, a thesaurus named DEFAULT must exist in the thesaurus tables before using any of the thesaurus operators.

Examples

The term automobile has a preferred term of car in a thesaurus. A PT query for automobile returns all documents that contain the word car. Documents that contain the word automobile are not returned.

Related Term (RT)

Use the related term operator (RT) to expand a query to include all related terms that have been defined in a thesaurus for the term.

Syntax

Syntax  Description 

RT(term[,thes]) 

Expands a query to include all the terms defined in the thesaurus as a related term for term

term

Specify the operand for the related term operator. term is expanded to include term and all the related entries defined for term in thes.

thes

Specify the name of the thesaurus used to return the expansions for the specified term. The thes argument is optional and has a default value of DEFAULT. As a result, a thesaurus named DEFAULT must exist in the thesaurus tables before using any of the thesaurus operators.

Examples

The term dog has a related term of wolf. A RT query for dog returns all documents that contain the word dog and wolf.

soundex (!)

Use the soundex (!) operator to expand queries to include words that have similar sounds; that is, words that sound like other words. This function allows comparison of words that are spelled differently, but sound alike in English.

Syntax

Syntax  Description 

!term 

Expands a query to include all terms that sound the same as the specified term (English-language text only). 

Examples

SELECT ID, COMMENT FROM EMP_RESUME

WHERE CONTAINS (COMMENT, '!SMYTHE') > 0 ;



ID COMMENT

-- ------------

23 Smith is a hard worker who..

stem ($)

Use the stem ($) operator to search for terms that have the same linguistic root as the query term.

The iMT stemmer, licensed from Xerox Corporation's XSoft Division, supports the following languages: English, French, Spanish, Italian, German, and Dutch.

Syntax

Syntax  Description 

$term 

Expands a query to include all terms having the same stem or root word as the specified term. 

Examples

Input  Expands To 

$scream 

scream screaming screamed 

$distinguish 

distinguish distinguished distinguishes 

$guitars 

guitars guitar 

$commit 

commit committed 

$cat 

cat cats 

$sing 

sang sung sing 

Stored Query Expression (SQE)

Use the SQE operator to call a stored query expression created with the CTX_QUERY.STORE_SQE procedure.

Stored query expressions can be used for creating predefined bins for organizing and categorizing documents or to perform iterative queries, in which an initial query is refined using one or more additional queries.

Syntax

Syntax  Description 

SQE(SQE_name

Returns the results for the stored query expression SQE_name

Examples

To create an SQE named disasters, use CTX_QUERY.STORE_SQE as follows:

begin

ctx_query.store_sqe('disasters', 'hurricane or earthquake or blizzard');

end;



This stored query expression returns all documents that contain either hurricane, earthquake or blizzard.

This SQE can then be called within a query expression as follows:

select score(1), docid from emp

where contains(resume, 'sqe(disasters)', 1)> 0

order by score(1);

SYNonym (SYN)

Use the synonym operator (SYN) to expand a query to include all the terms that have been defined in a thesaurus as synonyms for the specified term.

Syntax

Syntax  Description 

SYN(term[,thes]) 

Expands a query to include all the terms defined in the thesaurus as synonyms for term

term

Specify the operand for the synonym operator. term is expanded to include term and all the synonyms defined for term in thes.

thes

Specify the name of the thesaurus used to return the expansions for the specified term. The thes argument is optional and has a default value of DEFAULT. A thesaurus named DEFAULT must exist in the thesaurus tables if you use this default value.

Examples

The following query expression returns all documents that contain the term dog or any of the synonyms defined for dog in the DEFAULT thesaurus:

'SYN(dog)'

Compound Phrases in Synonym Operator

Expansion of compound phrases for a term in a synonym query are returned as AND conjunctives.

For example, the compound phrase temperature + measurement + instruments is defined in a thesaurus as a synonym for the term thermometer. In a synonym query for thermometer, the query is expanded to:

{thermometer} OR ({temperature}&{measurement}&{instruments})

threshold (>)

Use the threshold operator (>) in two ways:

The threshold operator at the expression level eliminates documents in the result set that score below a threshold number.

The threshold operator at the query term level selects a document based on how a term scores in the document.

Syntax

Syntax  Description 

expression>n

term>n 

Returns only those documents in the result set that score above the threshold n.

Within an expression, returns documents that contain the query term with score of at least n.  

Examples

At the expression level, to search for documents that contain relational databases and to return only documents that score greater than 75, use the following expression:

'relational databases > 75'



At the query term level, to select documents that have at least a score of 30 for lion and contain tiger, use the following expression:

'(lion > 30) and tiger'

Translation Term (TR)

Use the translation term operator (TR) to expand a query to include all defined foreign language equivalent terms.

Syntax

Syntax  Description 

TR(term[, lang, [thes]]) 

Expands term to include all the foreign equivalents that are defined for term.  

term

Specify the operand for the translation term operator. term is expanded to include all the foreign language entries defined for term in thes.

lang

Optionally, specify which foreign language equivalents to return in the expansion. The language you specify must match the language as defined in thes. If you omit this parameter, the system expands to use all defined foreign language terms.

thes

Optionally, specify the name of the thesaurus used to return the expansions for the specified term. The thes argument has a default value of DEFAULT. As a result, a thesaurus named DEFAULT must exist in the thesaurus tables before you can use any of the thesaurus operators.

Examples

Consider a thesaurus MY_THES with the following entries for cat:

cat

  SPANISH: gato

  FRENCH:  chat

To search for all documents that contain cat and the spanish translation of cat, issue the following query:

'tr(cat, spanish, my_thes)'



This query expands to:

'{cat}|{gato}|{chat}'

Translation Term Synonym (TRSYN)

Use the translation term operator (TR) to expand a query to include all the defined foreign equivalents of the query term, the synonyms of query term, and the foreign equivalents of the synonyms.

Syntax

Syntax  Description 

TR(term[, lang, [thes]]) 

Expands term to include foreign equivalents of term, the synonyms of term, and the foreign equivalents of the synonyms. 

term

Specify the operand for this operator. term is expanded to include all the foreign language entries and synonyms defined for term in thes.

lang

Optionally, specify which foreign language equivalents to return in the expansion. The language you specify must match the language as defined in thes. If you omit this parameter, the system expands to use all defined foreign language terms.

thes

Optionally, specify the name of the thesaurus used to return the expansions for the specified term. The thes argument has a default value of DEFAULT. As a result, a thesaurus named DEFAULT must exist in the thesaurus tables before you can use any of the thesaurus operators.

Examples

Consider a thesaurus MY_THES with the following entries for cat:

cat

  SPANISH: gato

  FRENCH:  chat

  SYN lion

    SPANISH: leon



To search for all documents that contain cat, the spanish equivalent of cat, the synonym of cat, and the spanish equivalent of lion, issue the following query:

'trsyn(cat, spanish, my_thes)'



This query expands to:

'{cat}|{gato}|{lion}|{leon}'

Top Term (TT)

Use the top term operator (TT) to replace a term in a query with the top term that has been defined for the term in the standard hierarchy (BT, NT) in a thesaurus. Top terms in the generic (BTG, NTG), partitive (BTP, NTP), and instance (BTI, NTI) hierarchies are not returned.

Syntax

Syntax  Description 

TT(term[,thes]) 

Replaces the specified word in a query with the top term in the standard hierarchy (BT, NT) for term

term

Specify the operand for the top term operator. term is replaced by the top term defined for the term in the specified thesaurus. However, if no TT entries are defined for term, term is not replaced in the query expression and term is the result of the expansion.

thes

Specify the name of the thesaurus used to return the expansions for the specified term. The thes argument is optional and has a default value of DEFAULT. A thesaurus named DEFAULT must exist in the thesaurus tables if you use this default value.

Examples

The term dog has a top term of animal in the standard hierarchy of a thesaurus. A TT query for dog returns all documents that contain the phrase animal. Documents that contain the word dog are not returned.

weight (*)

The weight operator multiplies the score by the given factor, topping out at 100 when the score exceeds 100. For example, the query cat, dog*2 sums the score of cat with twice the score of dog, topping out at 100 when the score is greater than 100.

In expressions that contain more than one query term, use the weight operator to adjust the relative scoring of the query terms. You can reduce the score of a query term by using the weight operator with a number less than 1; you can increase the score of a query term by using the weight operator with a number greater than 1 and less than 10.

The weight operator is useful in accumulate, OR, or AND queries when the expression has more than one query term. With no weighting on individual terms, the score cannot tell you which of the query terms occurs the most. With term weighting, you can alter the scores of individual terms and hence make the overall document ranking reflect the terms you are interested in.

Syntax

Syntax  Description 

term*n 

Returns documents that contain term. Calculates score by multiplying the raw score of term by n, where n is a number from 0.1 to 10. 

Examples

You have a collection of sports articles. You are interested in the articles about soccer, in particular Brazilian soccer. It turns out that a regular query on soccer or Brazil returns many high ranking articles on US soccer. To raise the ranking of the articles on Brazilian soccer, you can issue the following query:

'soccer or Brazil*3'



Table 4-1 illustrates how the weight operator can change the ranking of three hypothetical documents A, B, and C, which all contain information about soccer. The columns in the table show the total score of four different query expressions on the three documents.

Table 4-1
  soccer  Brazil  soccer or Brazil  soccer or Brazil*3 

20 

10 

20 

30 

10 

30 

30 

90 

50 

20 

50 

60 

The score in the third column containing the query soccer or Brazil is the score of the highest scoring term. The score in the fourth column containing the query soccer or Brazil*3 is the larger of the score of the first column soccer and of the score Brazil multiplied by three, Brazil*3.

With the initial query of soccer or Brazil, the documents are ranked in the order C B A. With the query of soccer or Brazil*3, the documents are ranked B C A, which is the preferred ranking.

wildcards (% _)

Wildcard characters can be used in query expressions to expand word searches into pattern searches. The wildcard characters are:

Wildcard Character  Description 

%  

The percent wildcard specifies that any characters can appear in multiple positions represented by the wildcard.  

_  

The underscore wildcard specifies a single position in which any character can occur. 

Right-Truncated Queries

Right truncation involves placing the wildcard on the right-hand-side of the search string.

For example, the following query expression finds all terms beginning with the pattern scal:

'scal%'

Left- and Double-Truncated Queries

Left truncation involves placing the wildcard on the left-hand-side of the search string.

To find words such as king, wing or sing, you can write your query as follows:

'_ing'



You can write this query more generally as:

'%ing'



You can also combine left-truncated and right-truncated searches to create double-truncated searches. The following query finds all documents that contain words that contain the substring %benz%

'%benz%'

Improving Double-Truncated Query Performance

When your wildcard queries are left- and double-truncated, you can improve query performance by creating a substring index. Substring indexes improve the query performance for all types of left-truncated wildcard searches such as %ed, _ing, or %benz%.

WITHIN

You can use the WITHIN operator to narrow a query down into document sections. Document sections can be one of the following:

Syntax

Syntax  Description 

expression WITHIN section 

Searches for expression within the pre-defined zone, field, or attribute section.

If section is a zone, expression can contain one or more WITHIN operators (nested WITHIN) whose section is a zone or special section.

If section is a field or attribute section, expression cannot contain another WITHIN operator. 

expression WITHIN SENTENCE 

Searches for documents that contain expression within a sentence. Specify an AND or NOT query for expression.

The expression can contain one or more WITHIN operators (nested WITHIN) whose section is a zone or special section. 

expression WITHIN PARAGRAPH 

Searches for documents that contain expression within a paragraph. Specify an AND or NOT query for expression.

The expression can contain one or more WITHIN operators (nested WITHIN) whose section is a zone or special section. 

Examples

Querying Within Zone Sections

To find all the documents that contain the term San Francisco within the section Headings, write your query as follows:

'San Francisco WITHIN Headings'



To find all the documents that contain the term sailing and contain the term San Francisco within the section Headings, write your query in one of two ways:

'(San Francisco WITHIN Headings) and sailing'



'sailing and San Francisco WITHIN Headings'



Compound Expressions with WITHIN

To find all documents that contain the terms dog and cat within the same section Headings, write your query as follows:

'(dog and cat) WITHIN Headings'



The above query is logically different from:

'dog WITHIN Headings and cat WITHIN Headings'



This query finds all documents that contain dog and cat where the terms dog and cat are in Headings sections, regardless of whether they occur in the same Headings section or different sections.

Near with WITHIN

To find all documents in which dog is near cat within the section Headings, write your query as follows:

'dog near cat WITHIN Headings'


Note:

The near operator has higher precedence than the WITHIN operator so braces are not necessary in this example. This query is equivalent to (dog near cat) WITHIN Headings


Nested WITHIN Queries

You can nest the within operator to search zone sections within zone sections.

For example, assume that a document set had the zone section AUTHOR nested within the zone BOOK section. You write a nested WITHIN query to find all occurrences of scott within the AUTHOR section of the BOOK section as follows:

'scott WITHIN AUTHOR WITHIN BOOK'

Querying Within Field Sections

The syntax for querying within a field section is the same as querying within a zone section. The syntax for most of the examples given in the previous section, "Querying Within Zone Sections", apply to field sections.

However, field sections behave differently from zone sections in terms of

The following sections describe these differences.

Visible Flag in Field Sections

When a field section is created with the visible flag set to FALSE in CTX_DDL.ADD_FIELD_SECTION, the text within a field section can only be queried using the WITHIN operator.

For example, assume that TITLE is a field section defined with visible flag set to FALSE. Then the query dog without the WITHIN operator will not find a document containing:

<TITLE>the dog</TITLE>. I like my pet.



To find such a document, you can use the WITHIN operator as follows:

'dog WITHIN TITLE'



Alternatively, you can set the visible flag to TRUE when you define TITLE as a field section with CTX_DDL.ADD_FIELD_SECTION.

Repeated Field Sections

WITHIN queries cannot distinguish repeated field sections in a document. For example, consider the document with the repeated section <author>:

<author> Charles Dickens </author>

<author> Martin Luther King </author>



Assuming that <author> is defined as a field section, a query such as (charles and martin) within author returns the document, even though these words occur in separate tags.

To have WITHIN queries distinguish repeated sections, define the sections as zone sections.

Nested Field Sections

You cannot issue a nested WITHIN query with field sections. Doing so raises an error.

Querying Within Sentence or Paragraphs

Querying within sentence or paragraph boundaries is useful to find combinations of words that occur in the same sentence or paragraph. To query sentence or paragraphs, you must first add the special section to your section group before you index. You do so with CTX_DDL.ADD_SPECIAL_SECTION.

To find documents that contain dog and cat within the same sentence:

'(dog and cat) WITHIN SENTENCE'



To find documents that contain dog and cat within the same paragraph:

'(dog and cat) WITHIN PARAGRAPH'



To find documents that contain sentences with the word dog but not cat:

'(dog not cat) WITHIN SENTENCE'

Querying Within Attribute Sections

You can query within attribute sections when you index with either XML_SECTION_GROUP or AUTOMATIC_SECTION_GROUP as your section group type.

Assume you have an XML document as follows:

<book title="Tale of Two Cities">It was the best of times.</book>



You can define the section title@book to be the attribute section title. You can do so with the CTX_DLL.ADD_ATTR_SECTION procedure or dynamically after indexing with ALTER INDEX.


Note:

When you use the AUTO_SECTION_GROUP to index XML documents, the system automatically creates attribute sections and names them in the form attribute@tag.

If you use the XML_SECTION_GROUP, you can name attribute sections anything with CTX_DDL.ADD_ATTR_SECTION. 


To search on Tale within the attribute section title, you issue the following query:

'Tale WITHIN title'

Constraints for Querying Attribute Sections

The following constraints apply to querying within attribute sections:

A query on Tale by itself does not produce a hit on the document unless qualified with WITHIN title@book. (This behavior is like field sections when you set the visible flag set to false.)

Then this document would hit on the regular query good men, ignoring the intervening attribute text.

Assume that book is a zone section and book@author is an attribute section. Consider the query:

'(Tale and Bondage) WITHIN book@author'



This query does not hit the document, because tale and bondage are in different occurrences of the attribute section book@author.