2010-03-12 26 views
13

Có rất nhiều kết quả không cần thiết bằng cách sử dụng phương thức contains() trong truy vấn của tôi. Đừng nói với tôi để sử dụng như hoặc cái gì khác. Nó được hardcoded và không thể thay đổi.Cách chứa() trong PL-SQL hoạt động?

+2

Bạn có thể đăng truy vấn không? – Padmarag

+0

Tôi có thể chuyển bất kỳ thông số nào vào chứa để thu hẹp kết quả tìm kiếm cho kết quả chính xác hay không. – Artic

+0

Chọn * từ blabla chứa (dFullText, "ô tô") – Artic

Trả lời

15

Chứa được sử dụng trên các lĩnh vực văn bản rằng có một 'BỐI CẢNH Index', mà chỉ một trường văn bản để tìm kiếm. Việc sử dụng các ý kiến ​​như thế này (sử dụng toán tử score để hiển thị những gì được trả về từ các contains khoản dựa trên 1 trong contains phù hợp với 1 trong score):

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

Đối với dữ liệu như thế này trong bảng table_name

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

truy vấn đó sẽ trở

2 A 
1 C 

Vì vậy chứa là tương tự như giống như, nhưng sẽ đếm số lần chuỗi xuất hiện trong trường văn bản. Tôi không thể tìm thấy tài nguyên sử dụng Chứa cách nó được sử dụng trong truy vấn bạn đã đăng, nhưng tôi nghĩ rằng sẽ trả về các hàng có dFullText có ít nhất một trường hợp car trong đó hoặc tương đương với sql này:

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

Here là một nguồn khác.

+0

Có sự khác biệt nào giữa hàm contains() và instr() không? – Rene

+0

@Rene, vâng, chúng khác nhau. 'Contains()' đếm số lần chuỗi xuất hiện trong trường văn bản và trả về số đó. 'instr()' tìm kiếm một chuỗi trong một trường (hoặc chuỗi khác) và trả về chỉ mục của chuỗi tìm kiếm đầu tiên được tìm thấy (hoặc 0 nếu nó không được tìm thấy). Xem ví dụ về 'instr()' tại http://www.techonthenet.com/oracle/functions/instr.php – rosscj2533

0

Xem ví dụ này từ 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; 
Các vấn đề liên quan