2010-03-12 137 views
13

在查詢中使用contains()方法會產生大量不必要的結果。不要告訴我使用喜歡或別的東西。它是硬編碼的,不能改變。PL-SQL中的contains()如何工作?

+2

你可以發佈查詢嗎? – Padmarag 2010-03-12 07:16:16

+0

我可以通過任何params進入包含將搜索結果縮小到精確結果 – Artic 2010-03-12 07:25:25

+0

從blabla選擇*包含(dFullText,「car」) – Artic 2010-03-12 07:40:56

回答

15

此示例包含在對具有「上下文索引」,其索引的文本字段搜索文本字段中使用。標準使用是這樣的(使用score操作者顯示的內容是基於所述1 contains匹配contains子句返回的1 score):

SELECT score(1), value 
FROM table_name 
WHERE CONTAINS(textField, 'searchString', 1) > 0; 

對於表這樣數據table_name

value | textField 
-------|----------------------------------------------- 
A  | 'Here is searchString. searchString again.' 
B  | 'Another string' 
C  | 'Just one searchString' 

該查詢返回

2 A 
1 C 

等都含有類同像,但會計算一個字符串在文本字段中出現的次數。我找不到使用包含它在您發佈的查詢使用方式的資源,但我認爲這將返回行,其中dFullText具有car至少一個實例中,或者此SQL相當於:

Select * from blabla where dFullText like "%car%" 

Here是另一個來源。

+0

contains()和instr()之間是否有區別? – Rene 2010-03-22 15:43:28

+0

@Rene,是的,他們是不同的。 'Contains()'計算一個字符串在文本字段中出現的次數,並返回該數字。 instr()在字段(或其他字符串)中搜索字符串,並返回找到的第一個搜索字符串的索引(如果未找到,則返回0)。在http://www.techonthenet.com/oracle/functions/instr.php上查看'instr()'的例子 – rosscj2533 2010-03-22 17:22:02

0

請參閱從oracle.com

declare 
rowno number := 0; 
    begin 
    for c1 in (SELECT SCORE(1) score, title FROM news 
      WHERE CONTAINS(text, 'oracle', 1) > 0 
      ORDER BY SCORE(1) DESC) 
    loop 
    rowno := rowno + 1; 
    dbms_output.put_line(c1.title||': '||c1.score); 
exit when rowno = 10; 
end loop; 
end;