ACCUMulate ( , )
Use the ACCUM operator to search for documents that contain at least one occurrence of any query terms, with the returned documents ranked by a cumulative score based on how many query terms are found (and how frequently).
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. |
ACCUMulate Scoring
ACCUMulate first scores documents on how many query terms a document matches. A document that matches more terms will always score higher than a document that matches fewer terms, even if the terms appear more frequently in the latter. In other words, if you search for dog ACCUM cat, you’ll find that
the dog played with the cat
scores higher than
the big dog played with the little dog while a third dog ate the dog food
Scores are divided into ranges. In a two-term ACCUM, hits that match both terms will always score between 51 and 100, whereas hits matching only one of the terms will score between 1 and 50. Likewise, for a three-term ACCUM, a hit matching one term will score between 1 and 33; a hit matching two terms will score between 34 and 66, and a hit matching all three terms will score between 67 and 100. Within these ranges, normal scoring algorithms apply.
See Also: The Oracle Text Scoring Algorithm for more information on how scores are calculated
You can assign different weights to different terms. For example, in a query of the form
soccer, Brazil*3
the term Brazil is weighted three times as heavily as soccer. Therefore, the document
people play soccer because soccer is challenging and fun
will score lower than
Brazil is the largest nation in South America
but both documents will rank below
soccer is the national sport of Brazil
Note that a query of soccer ACCUM Brazil3* is equivalent to soccer ACCUM Brazil ACCUM Brazil ACCUM Brazil. Because each query term Brazil is considered independent, the entire query is scored as though it has four terms, not two, and thus has four scoring ranges. The first Brazil-and-soccer example document shown above scores in the first range (1-25), the second scores in the third range (51-75), and the third scores in the fourth range (76-100). (No document scores in the second range, because any document with Brazil in it will be considered to match at least three query terms.)
Example for ACCUM Operator
set serveroutput on;
DROP TABLE accumtbl;
CREATE TABLE accumtbl (id NUMBER, text VARCHAR2(4000) );
INSERT INTO accumtbl VALUES ( 1, 'the little dog played with the big dog
while the other dog ate the dog food');
INSERT INTO accumtbl values (2, 'the cat played with the dog');
CREATE INDEX accumtbl_idx ON accumtbl (text) indextype is ctxsys.context;
PROMPT dog ACCUM cat
SELECT SCORE(10) FROM accumtbl WHERE CONTAINS (text, 'dog ACCUM cat', 10)
> 0;
PROMPT dog*3 ACCUM cat
SELECT SCORE(10) FROM accumtbl WHERE CONTAINS (text, 'dog*3 ACCUM cat', 10)
> 0;
This produces the following output. Note that the document with both dog and cat scores highest.
dog ACCUM cat
ID SCORE(10)
----- ----------
1 6
2 52
dog*3 ACCUM cat
ID SCORE(10)
----- ----------
1 53
2 76