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
SELECT
SCORE(1)
FROM
accumtbl
WHERE
CONTAINS (text, 'dog accum Cat', 1) > 0;
输出:
SCORE(1)
6
52
如何?
我尝试使用不同的值,但无法理解参数的含义以及如何计算分数
SELECT
SCORE(1)
FROM
accumtbl
WHERE
CONTAINS (text, 'dog accum Cat', 1) > 0;
输出:
SCORE(1)
6
52
输出:
SCORE(1)
6
52
答案 0 :(得分:2)
包含Oracle Text运算符。文档(https://docs.oracle.com/database/121/CCAPP/GUID-13F9B749-125B-40FD-9AFD-A636597447D0.htm#CCAPP9136)说:
创建类型为CONTEXT的索引时,必须使用CONTAINS运算符输入查询。类型为CONTEXT的索引适合于索引大型连贯文档。
使用CONTAINS运算符,您可以使用许多运算符来定义搜索条件。这些运算符使您可以输入逻辑,邻近,模糊,词干,词库和通配符搜索。使用正确配置的索引,您还可以在具有内部结构(例如HTML和XML)的文档上输入节搜索。
使用CONTAINS,您还可以使用ABOUT运算符搜索文档主题。
此外:
CONTAINS运算符必须始终跟随> 0语法,该语法指定CONTAINS运算符返回的得分值必须大于零才能返回行。
在SELECT语句中调用SCORE运算符时,CONTAINS运算符必须在第三个参数中引用得分标签值
我认为您对以SCORE
和CONTAINS
书写的数字感到困惑-它们应该匹配。将它们视为“标签”。
一个更“复杂”的例子可能是这样:
SQL> SELECT SCORE (1) sc1,
2 SCORE (2) sc2
3 FROM accumtbl
4 WHERE CONTAINS (text, 'dog accum Cat', 1) > 0 --> this "1" comes from "score (1)"
5 OR CONTAINS (text, 'little dog' , 2) > 0 --> this "2" comes from "score (2)"
6 ;
SC1 SC2
---------- ----------
6 4
52 0
SQL>
您说:
我尝试使用不同的值...(但总是得到相同的结果)
你当然做到了;所有这些都将返回相同的结果:
select score(1) ... contains (text, 'something', 1)
select score(100) ... contains (text, 'something', 100)
select score(57) ... contains (text, 'something', 57)
select score(-261) ... contains (text, 'something', -261)
关于Oracle Text的内容很多。这是目录(https://docs.oracle.com/database/121/CCAPP/toc.htm);阅读愉快!