sql全文搜索
㈠ sql server 全文搜索的結果要比用like查詢出來的結果少,這是怎麼回事
你的like是怎麼寫的?
like '%xxxx%'和like 'xxxx%'的結果有可能是不同的。
㈡ sql中全文檢索的具體細節
全文索引和全文檢索是sql server 7.0的新增功能,它能夠對數據中的字元類型列(如varchar、text等類型列)進行索
引,並通過索引實現全文搜索查詢。sql server常規索引與全文檢索相比,二者的區別如下:
常規索引 全文索引
使用create index或約束定義創建 使用全文索引存儲過程創建和刪除
通過刪除或執行drop index語句刪除
當插入、修改或刪除數據時,sql server 只能通過任務調度或執行存儲過
能夠自動更新常規索引內容 程來填充全文索引
每個表可以建立多個常規索引 每個表只能有一個全文索引
索引不能分組 同一個資料庫中的多個全文索引可
以組織為一個全文目錄
常規索引存儲在資料庫文件中 全文索引存儲在文件系統中
為了支持全文索引操作,sql server 7.0新增了一些新存儲過程和transact-sql語句,使用這些存儲過程創建全文索引的
具本步驟為(括弧內為每步所調用的存儲過程名稱):
(1)啟動資料庫的全文處理功能(sp_fulltext_datebase);
(2)建立全文目錄(sp_fulltext_catalog);
(3)在全文目錄中注冊需要全文索引的表(sp_fulltext_table);
(4)指出表中需要全文檢索的列名(sp_fulltext_column)
(5)為表創建全文索引(sp_fulltext_table);
(6)填充全文索引(sp_fulltext_catalog)。
例:
use pubs
go
exec sp_fulltext_database 'enable'
--為titles表建立全文索引數據元,其中create為建立,activate為激活,deactivate為關閉表全文索引的激活狀態,使
它不再參加全文目錄填充,drop為刪除;create參數中,後面跟的是全文目錄名稱和索引列名。
--下面語句為pubs資料庫中的titles表創建全文索引數據元,存儲該數據元的全文目錄為FT_pubs,所使用的唯一索引為
UPKCL_titleidind(title表中為title_id列的PRIMARY KEY約束所建立的唯中索引)
sp_fulltext_table titles,'create','FT_pubs','upkcl_titledind'
--激活它
sp_fulltext_table titles,'activate'
--指定參加全文索引的列
sp_fulltext_column 'titles','title','add'
sp_fulltext_column 'titles','notes','add'
下面是一個完整的例子:
--在執行該腳本程序之前啟動sql server的全文搜索服務,即microsoft search服務
use pubs --打開資料庫
go
--檢查pubs是否支持全文索引,如果不支持全文索引,則使用sp_fulltext_datebase打開該功能
if (select databaseproperty ('pubs','IsFulltextEnables'))=0
execute sp_fulltext_database 'enable'
--建立全文目錄FT_pubs
execute sp_fulltext_catalog 'FT_pubs','create'
--為titles表建立全文索引數據元
execute sp_fulltext_table 'titles','FT_pubs','UPKCL_titleidind'
--設置全文索引列名
execute sp_fulltext_column 'titles','title','add'
execute sp_fulltext_column 'titles','notes','add'
--建立全文索引
execute sp_fulltext_table 'FT_pubs','activate'
--填充全文索引目錄
execute sp_fulltext_catalog 'FT_pubs','start_full'
GO
--檢查全文目錄填充情況
WHILE FulltextCatalogProperty("FT_pubs','PopulateStatus')<>0
BEGIN
--如果全文目錄正處於填充狀態,則等待30秒後再檢測一次
WAITFOR DELAY 『0:0:30』
END
--全文目錄填充完成後,使用全文目錄檢索
--查詢title列或notes列中包含有database或computer字元串的圖書名稱
SELECT title
FROM title
where CONTAINTS(title,'database')
or contains(notes,'database')
or contains(title,'computer')
or contains(notes,'computer')
㈢ 建立全文檢索的sql語句
前言:微軟的SQL Server資料庫是一個在中低端企業應用中佔有廣泛市場的關系型資料庫系統,它以簡單、方便、易用等特性深得眾多軟體開發人員和資料庫管理人員的鍾愛。但SQL Server 7.0以前的資料庫系統由於沒有全文檢索功能,致使無法提供像文本內容查找此類的服務,成為一個小小的遺憾。從SQL Server 7.0起,到如今的SQL Server 2000終於具備了全文檢索功能,使用戶可以高效地檢索存儲在資料庫char、varchar、text、ntext、nchar、nvarchar等數據類型列中的文本數據。
建立全文索引
在進行全文檢索之前,必須先建立和填充資料庫全文索引。為了支持全文索引操作,SQL Server 7.0新增了一些存儲過程和Transact-SQL語句。使用這些存儲過程創建全文索引的具體步驟如下(括弧內為調用的存儲過程名稱):
1. 啟動資料庫的全文處理功能(sp_fulltext_
database);;
2. 建立全文檢索目錄(sp_fulltext_catalog);
3.在全文檢索目錄中注冊需要全文索引的表(sp_fulltext_table);
4. 指出表中需要全文檢索的列名(sp_fulltext_
column);;
5. 為表創建全文索引(sp_fulltext_table);;
6. 填充全文檢索目錄(sp_fulltext_catalog)。
下面舉例說明如何創建全文索引,在本例中,對Test資料庫Book表中Title列和Notes列建立全文索引。
use test //打開資料庫
//打開全文索引支持,啟動SQL Server的全文搜索服務
execute sp_fulltext_database 『enable』
//建立全文檢索目錄ft_test
execute sp_fulltext_catalog 『ft_test』, 『create』
為Title列建立全文索引數據元,pk_title為Book表中由主鍵所建立的唯一索引,這個參數是必需的。
execute sp_fulltext_table 『book』,『create』, 『ft_test』,『pk_title』
//設置全文索引列名
execute sp_fulltext_column 『book』, 『title』, 『add』
execute sp_fulltext_column 『book』,『notes』, 『add』
//建立全文索引
execute sp_fulltext_table 『book』, 『activate』
//填充全文索引目錄
execute sp_fulltext_catalog 『ft_test』, 『start_full』
至此,全文索引建立完畢。
進行全文檢索
SQL Server 2000提供的全文檢索語句主要有CONTAINS和FREETEXT。CONTAINS語句的功能是在表的所有列或指定列中搜索:一個字或短語;一個字或短語的前綴;與一個字相近的另一個字;一個字的派生字;一個重復出現的字。
CONTAINS語句的語法格式為:
CONTAINS({column | *}), <contains_search_condition> )
其中,column是搜索列,使用「*」時說明對表中所有全文索引列進行搜索。Contains_search_
condition 說明CONTAINS語句的搜索內容,其語法格式為:
{||||}[{{AND|AND NOT|OR}}] [...n]
下面就simple_term和prefix_term參數做簡要說明:
simple_term是CONTAINS語句所搜索的單字或短語,當搜索的是一個短語時,必須使用雙引號作為定界符。其格式為:
{『word』|「 phrase」}
prefix_term說明CONTAINS語句所搜索的字或短語前綴,其格式為:
{「word*」 | 「phrase*」}
例如,下面語句檢索Book表的Title列和Notes列中包含「database」或「computer」字元串的圖書名稱及其注釋信息:
select title, notes
from book
where contains(tilte, 『database』) or contains(notes,『database』)
or contains(title,『computer』) or contains(notes,『computer』)
FREETEXT語句的功能是在一個表的所有列或指定列中搜索一個自由文本格式的字元串,並返回與該字元串匹配的數據行。所以,FREETEXT語句所執行的功能又稱做自由式全文查詢。
FREETEXT語句的語法格式為:FREETEXT({column | * },『freetext_string』)
其中,column是被搜索列,使用「*」時說明對表中的所有全文索引列進行搜索。Freetext_string參數指出所搜索的自由文本格式字元串。
例如,下面語句使用FREETEXT語句搜索Book表中包含「Successful Life」字元串的數據行:
select title, notes
from book
where freetext(*,『Successful Life』)
㈣ sqlserver有自帶的全文檢索
有自帶的全文檢索,主要功能是在指定列上創建全文檢索索引,然後可以基於關鍵字查詢該列內容。
在where語句後面用CONTAINS(列名,value)這個函數就可以,沒有索引的話應該就是掃描的方式執行。
㈤ SQL中全文搜索怎麼提高效率
很多互聯網應用程序都提供了全文搜索功能,用戶可以使用一個詞或者詞語片斷作為查詢項目來定位匹配的記錄。在後台,這些程序使用在一個SELECT查詢中的LIKE語句來執行這種查詢,盡管這種方法可行,但對於全文查找而言,這是一種效率極端低下的方法,尤其在處理大量數據的時候。
1、建立索引
2、where條件定位
3、具體選擇所要的欄位等等
或者使用存儲過程或視圖等來提高效率
㈥ sql 全文搜索 怎麼分詞的
全文索引的核心理念是倒排索引(即反向索引),而最大的技術難點就在於分詞。
英文的分詞很簡單,直接按空格分詞即可。但中文不能這么干,主要原因有兩點:
中文詞與詞之間沒有空格
中文分詞結果存在歧義。例如:周立波/小人/傻逼 和 周立/波小/人傻逼,兩種分詞都說得通,只有結合上下文才知道哪一種對
因此,中文分詞比英文分詞要困難得多,學術界在這一領域已經研究了多年,並取得了很多研究成果,但目前,中文分詞的技術仍然很不完善。
回到全文搜索的話題,sql server自帶的中文分詞應該是基於正向最大匹配法的,說實話效果並不好。要求不高的話可以湊活用。除此之外,也有一些開源或商業的項目,例如Lucene(及其後續衍生),盤古等等,比sql server自帶的要強。但這些項目也有問題:一是分詞效果難稱完美,二是在資料庫中使用比較麻煩。
以上全部手打。有什麼問題請繼續問。
㈦ sqlserver 全文檢索
select * from 表名 where contains(城市,'"北*京"')
contains通配符是*,不過分詞字典里不一定有「北 京」這個詞,所以容易導致查不出來select * from 表名 where contains(城市,'"北"') and contains(城市,'"京"')
㈧ SQL Server 全文搜索 通配符問題
select * from test where contains(*, '"*北*" or "*南*"')
*北* *南*
㈨ sql全文搜索。
全文索引的模糊查詢是*吧
㈩ sql server 2008 contains 全文搜索的問題
contains是完全匹配的字元,freetext是只要包含該字元的就可以。
英文中就比較明顯,比如搜索『textbook』
用contains(*, 'text') 不會拿到結果,用freetext(*, 'text')就可以。
至於你遇到的情況,可能是由於對中文支持不夠友好。
你試下freetext看怎樣