2011-01-18 50 views
6

Tôi mới tìm kiếm toàn văn bản SQL Server và đang cố gắng tìm ra cách tốt nhất để tìm kiếm nhiều từ bằng cách sử dụng công cụ uốn để tìm kiếm sử dụng các hình thức khác nhau của tất cả các từ.Tìm kiếm toàn văn SQL Server bằng cách sử dụng CONTAINS, FORMSOF, NEAR cho nhiều từ tìm kiếm

Từ nội dung tôi đọc, FREETEXT sử dụng ẩn hoặc HOẶC khi được sử dụng với nhiều từ. Tôi muốn một AND để các kết quả tìm kiếm chứa tất cả các từ, vì vậy vì điều này tôi đang chọn sử dụng CONTAINS.

Tôi đang cố gắng làm điều gì đó giống như truy vấn bên dưới, sử dụng FORMSOF với từ khóa lân cận NEAR cho nhiều từ. Lưu ý rằng đây không phải là cú pháp hợp lệ và trả về lỗi:

select top 5 * 
from content 
WHERE CONTAINS((Title,Subtitle,Body), 'FORMSOF(INFLECTIONAL, model NEAR airplane)') 

Tuy nhiên, truy vấn bên dưới hoạt động, nhưng tôi không biết nó có mang lại kết quả mong muốn hay không. Có sự khác biệt giữa "AND" và "NEAR" với Tìm kiếm Toàn văn SQL không?

select top 5 * 
from content 
WHERE CONTAINS((Title,Subtitle,Body), 'FORMSOF(INFLECTIONAL, model) AND FORMSOF(INFLECTIONAL, airplane)') 

Tôi đoán điều tôi đang hỏi là, có cách nào để sử dụng CONTAINS, FORMSOF và NEAR với nhiều từ tìm kiếm không? Hoặc tôi nên sử dụng truy vấn thứ hai ở trên sử dụng "AND"?

Trả lời

9

Từ các tài liệu:

<proximity_term> ::= 
    { <simple_term> | <prefix_term> } 
    { { NEAR | ~ } 
    { <simple_term> | <prefix_term> } 
    } [ ...n ] 

Điều này có nghĩa bạn có thể sử dụng NEAR ngữ cho (có thể có tiền tố) từ, cụm từ và sự kết hợp của họ.

tiền tố Kể từ thuật ngữ tìm kiếm của bạn được biến cách sử dụng quy tắc khá đơn giản, bạn chỉ có thể sử dụng:

SELECT * 
FROM content 
WHERE CONTAINS((Title,Subtitle,Body), 'model* NEAR airplane*') 

hoặc sử dụng AND và làm lọc tốt trên các mặt hàng

SELECT * 
FROM ft 
WHERE CONTAINS((Title,Subtitle,Body), 'FORMSOF(INFLECTIONAL, "model") AND FORMSOF(INFLECTIONAL, "airplane")') 
Các vấn đề liên quan