Like直接在數據據中查找可以查到所有所需記錄但是會掃描整個表會影響性能CONTAINS是基於全文索引進行查詢,查詢結果受系統全文索引分詞的方法影響查詢結果會不全。
Select * FROM A Where CONTAINS(B,'"IT"Or"理論"')5257條記錄
Select * FROM A Where B Like'%IT%' or B LIKE '%理論%' 5468條記錄
結論:需要精確查詢用Like如產品搜索,內容搜索可以用CONTAINS提高效率。
我們通常在 WHERE 子句中使用 CONTAINS ,就象這樣:SELECT * FROM table_name WHERE CONTAINS(fullText_column,'search contents')。
我們通過例子來學習,假設有表 students,其中的 address 是全文本檢索的列。
1. 查詢住址在北京的學生
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, 'beijing' )
remark: beijing是一個單詞,要用單引號括起來。
2. 查詢住址在河北省的學生
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, '"HEIBEI province"' )
remark: HEBEI province是一個詞組,在單引號里還要用雙引號括起來。
3. 查詢住址在河北省或北京的學生
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, '"HEIBEI province" OR beijing' )
remark: 可以指定邏輯操作符(包括 AND ,AND NOT,OR )。
4. 查詢有 '南京路' 字樣的地址
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, 'nanjing NEAR road' )
remark: 上面的查詢將返回包含 'nanjing road','nanjing east road','nanjing west road' 等字樣的地址。
A NEAR B,就表示條件: A 靠近 B。
5. 查詢以 '湖' 開頭的地址
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, '"hu*"' )
remark: 上面的查詢將返回包含 'hubei','hunan' 等字樣的地址。
記住是 *,不是 %。
6. 類似加權的查詢
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, 'ISABOUT (city weight (.8), county wright (.4))' )
remark: ISABOUT 是這種查詢的關鍵字,weight 指定了一個介於 0~1之間的數,類似系數(我的理解)。表示不同條件有不同的側重。
7. 單詞的多態查詢
SELECT student_id,student_name
FROM students
WHERE CONTAINS( address, 'FORMSOF (INFLECTIONAL,street)' )
remark: 查詢將返回包含 'street','streets'等字樣的地址。
對於動詞將返回它的不同的時態,如:dry,將返回 dry,dried,drying 等等。
以上例子都使用英文,不使用中文是因為有的查詢方式中文不支持,而且我的計算機是英文系統。
全文索引——CONTAINS 語法
我們通常在 WHERE 子句中使用 CONTAINS ,就象這樣:SELECT * FROM table_name WHERE CONTAINS(fullText_column,'search contents')。
如果你在選定字段中查詢一個匹配的直接使用
如:
從company中檢查是否有test1的則:
select * from company
where contains(*,'test1')
如果要檢查的是兩個關鍵字,如是或地關系:
select * from company
where contains(*,'"北京" or "tttt"')
注意:關鍵字“北京”和“tttt”必須用"",包括起來,or代表兩個關鍵字之間是"或"的關系
如果是與的關系:
select * from company
where contains(*,'"北京" and "tttt"')
如果是三個關鍵字則:
關鍵字前的那個or或者and 表示跟其他關鍵字的關系
and 表示兩個詞是靠近的
