當前位置:首頁 » 編程語言 » sql全文檢索

sql全文檢索

發布時間: 2022-05-15 20:12:22

sql server 全文索引和普通索引有什麼區別

兩種索引的功能和結構都是不同的
普通索引的結構主要以B+樹和哈希索引為主,用於實現對欄位中數據的精確查找,比如查找某個欄位值等於給定值的記錄,A=10這種查詢,因此適合數值型欄位和短文本欄位
全文索引是用於檢索欄位中是否包含或不包含指定的關鍵字,有點像搜索引擎的功能,其內部的索引結構採用的是與搜索引擎相同的倒排索引結構,其原理是對欄位中的文本進行分詞,然後為每一個出現的單詞記錄一個索引項,這個索引項中保存了所有出現過該單詞的記錄的信息,也就是說在索引中找到這個單詞後,就知道哪些記錄的欄位中包含這個單詞了。因此適合用大文本欄位的查找。
大欄位之所以不適合做普通索引,最主要的原因是普通索引對檢索條件只能進行精確匹配,而大欄位中的文本內容很多,通常也不會在這種欄位上執行精確的文本匹配查詢,而更多的是基於關鍵字的全文檢索查詢,例如你查一篇文章信息,你會只輸入一些關鍵字,而不是把整篇文章輸入查詢(如果有整篇文章也就不用查詢了)。而全文索引正是適合這種查詢需求。

❷ 如何設置SQL Server資料庫全文索引服務

在Microsoft SQL Server 7.0 中提供了全文索引服務(Full-Text Search Service),在查詢性能上,對varchar,char,text類型的欄位的匹配查詢比用SQL語句使用Like操作符及匹配符的速度快10倍以上;在查詢匹配上,提供了模糊匹配的高級搜索性能並能夠返回查詢的命中率。 Full Text Search Service包含在SQL Server 7.0中,在SQL Server 7 Destop版中不起作用。安裝SQL Server時,無法預設安裝它,需要在Custom Installation 中選擇。 服務安裝完後在SQL Server EntERPrise Manager中的Support Services中顯示為Full-text Search,在控制面版中的服務中顯示為Microsoft Search.可以在SQL Server EnterPrise Manager中啟動這個服務,就可以在表中加入全文索引了。要注意:只有有唯一索引欄的表才能建立全文索引,並且全文索引建立好之後就不能改變表了,如要改變表就必須得取出索引,然後再裝入。
對表設置全文索引應用如下步驟:
1.選擇要建立全文索引的表,然後選擇: Full-Text Index Table ->Define Full-Text Indexing on a table
2.系統會啟動SQL Server Full-Text Index 向導。
3.選擇一個唯一索引。
4.選擇一個要建立索引的欄位。
5.選擇catalog。
6.選擇更新索引計劃(由於全文索引和普通索引表不同,不能自動更新,所以得加入一個計劃
)。
7.Finish。
8.選擇在資料庫Full-text catalogs中里的新建立的catalog,然後運行Start Population,Full Population 就可以了。

❸ sqlserver有自帶的全文檢索

有自帶的全文檢索,主要功能是在指定列上創建全文檢索索引,然後可以基於關鍵字查詢該列內容。
在where語句後面用CONTAINS(列名,value)這個函數就可以,沒有索引的話應該就是掃描的方式執行。

❹ 如何在SQL中啟用全文檢索功能

默認情況下,所有用戶創建的資料庫都啟用了全文索引。另外,在為表創建全文索引並將列添加到索引之後,就會自動為單個表啟用全文索引。

❺ 建立全文檢索的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』)

❻ 和SQL資料庫里的查詢/全文檢索有什麼區別

這個問題很難回答,es也可以理解成是一種資料庫,不僅能提供全文檢索功能,還可以支持各種數值類的區間查詢,聚合計算等,這些和傳統資料庫一樣,從使用場景來說,資料庫一般用來存meta,比如網站用戶,用戶資源等等,這些數據有個特點就是量不會很大,還有就是這些數據一般都比較結構化。
es一般用來存一些流式數據,比如應用日誌,這也是目前es應用最廣的方面,這些數據有個特點就是往往結構不固定,比如應用日誌,不同的程序員寫得模塊打出來的日誌欄位數量都不一樣,這種數據就不太方便用資料庫來處理。
最後,一般傳統資料庫,全文檢索都實現的很雞肋,因為一般也沒人用資料庫存文本欄位。
上面從使用場景上說明了兩者的區別,從技術上兩者全文檢索的實現都差不多,無非是倒排索引,但是lucene畢竟是專業的,做了十幾年了,索引效率,存儲空間等都比傳統資料庫快很多,技術也迭代的非常快。
以上就是我總結的不同之處,希望能解答樓主的疑惑。
作者:Razzit
鏈接:https://www.hu.com/question/53063256/answer/151074607
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。

❼ 如何使用SQL Server中的全文索引

一、設置詞法分析器
Oracle實現全文檢索,其機制其實很簡單。即通過Oracle專利的詞法分析器(lexer),將文章中所有的表意單元(Oracle稱為term)找出來,記錄在一組以dr$開頭的表中,同時記下該term出現的位置、次數、hash值等信息。檢索時,Oracle從這組表中查找相應的term,並計算其出現頻率,根據某個演算法來計算每個文檔的得分(score),即所謂的『匹配率』。而lexer則是該機制的核心,它決定了全文檢索的效率。Oracle針對不同的語言提供了不同的lexer,而我們通常能用到其中的三個:
basic_lexer:針對英語。它能根據空格和標點來將英語單詞從句子中分離,還能自動將一些出現頻率過高已經失去檢索意義的單詞作為『垃圾』處理,如if , is等,具有較高的處理效率。但該lexer應用於漢語則有很多問題,由於它只認空格和標點,而漢語的一句話中通常不會有空格,因此,它會把整句話作為一個term,事實上失去檢索能力。以『中國人民站起來了』這句話為例,basic_lexer分析的結果只有一個term ,就是『中國人民站起來了』。此時若檢索『中國』,將檢索不到內容。
chinese_vgram_lexer:專門的漢語分析器,支持所有漢字字元集(SUTF8)。該分析器按字為單元來分析漢語句子。『中國人民站起來了』這句話,會被它分析成如下幾個term: 『中』,『中國』,『國人』,『人民』,『民站』,『站起』,起來』,『來了』,『了』。可以看出,這種分析方法,實現演算法很簡單,並且能實現『一網打盡』,但效率則是差強人意。
chinese_lexer:這是一個新的漢語分析器,只支持utf8字元集。上面已經看到,chinese vgram lexer這個分析器由於不認識常用的漢語詞彙,因此分析的單元非常機械,像上面的『民站』,『站起』在漢語中根本不會單獨出現,因此這種term是沒有意義的,反而影響效率。chinese_lexer的最大改進就是該分析器能認識大部分常用漢語詞彙,因此能更有效率地分析句子,像以上兩個愚蠢的單元將不會再出現,極大提高了效率。但是它只支持utf8,如果你的資料庫是zhs16gbk字元集,則只能使用笨笨的那個Chinese vgram lexer.
如果不做任何設置,Oracle預設使用basic_lexer這個分析器。要指定使用哪一個lexer,可以這樣操作:

BEGIN
ctx_ddl.create_preference ('my_lexer', 'chinese_vgram_lexer');
END;
/
其中my_lexer是分析器名。

二、建立全文索引
在建立intermedia索引時,指明所用的lexer:

CREATE INDEX myindex ON mytable(mycolumn) indextype is ctxsys.context parameters('lexer my_lexer');

※個人體會:全文索引建立後,用pl/sql developer工具view table,在index這一欄是看不到索引信息的。
而本人在刪除全文索引時遇到過一下報錯:
SQL> drop index searchkeytbl_key;
drop index searchkeytbl_key
ORA-29868: cannot issue DDL on a domain index marked as LOADING
解決方法:
ORA-29868: cannot issue DDL on a domain index marked as LOADING
說明:在創建索引的時候斷開、重啟等導致索引中斷沒有執行成功,之後再drop或者rebuild等操作的時候都會報此錯誤
解決:只能drop index ind_name force強行刪除,然後再重建

三、索引同步維護
用以下的兩個job來完成(該job要建在和表同一個用戶下) :
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.sync_index(''index_name'');',
SYSDATE, 'SYSDATE + (1/24/4)');
commit;
END; //同步

VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.optimize_index(''myindex'',''FULL'');',
SYSDATE, 'SYSDATE + 1');
commit; //優化
建完後手動運行下:
exec dbms_job.run(jobno);
※個人體會:運行job可能會有問題,此時可以單獨運行索引,嘗試一下
exec ctx_ddl.sync_index('index_name');
如果單獨運行沒有問題,則檢查job是否寫錯或者當前操作的oracle資料庫用戶有無運行存儲過程的許可權
SQL> exec dbms_job.run(190);
begin dbms_job.run(190); end;
ORA-12011: execution of 1 jobs failed
ORA-06512: at "SYS.DBMS_IJOB", line 406
ORA-06512: at "SYS.DBMS_JOB", line 272
ORA-06512: at line 1
以上報錯就是用戶沒有運行任何存儲過程造成的,此時需要對用戶加上這個許可權:
SQL> grant execute any procere to oracle_username;
再看一下job的情況
select * from user_jobs;

❽ SQL中全文搜索怎麼提高效率

很多互聯網應用程序都提供了全文搜索功能,用戶可以使用一個詞或者詞語片斷作為查詢項目來定位匹配的記錄。在後台,這些程序使用在一個SELECT查詢中的LIKE語句來執行這種查詢,盡管這種方法可行,但對於全文查找而言,這是一種效率極端低下的方法,尤其在處理大量數據的時候。
1、建立索引
2、where條件定位
3、具體選擇所要的欄位等等

或者使用存儲過程或視圖等來提高效率

❾ 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')

❿ 如何提高sql2000全文檢索搜索效率

4月29日 14:51 ■SQL Server 2000 的各種版本
Microsoft SQL Server 2000 的可用版本如下:
=========================================

SQL Server 2000 企業版
----------------------
作為生產資料庫伺服器使用。支持 SQL Server 2000 中的所有可用功能,並可根據支持最大的 Web 站點和企業聯機事務處理 (OLTP) 及數據倉庫系統所需的性能水平進行伸縮。

SQL Server 2000 標准版
----------------------
作為小工作組或部門的資料庫伺服器使用。

SQL Server 2000 個人版
----------------------
供移動的用戶使用,這些用戶有時從網路上斷開,但所運行的應用程序需要 SQL Server 數據存儲。 在客戶端計算機上運行需要本地 SQL Server 數據存儲的獨立應用程序時也使用個人版。

SQL Server 2000 開發版
----------------------
供程序員用來開發將 SQL Server 2000 用作數據存儲的應用程序。雖然開發版支持企業版的所有功能 ,使開發人員能夠編寫和測試可使用這些功能的應用程序,但是只能將開發版作為開發和測試系統使 用,不能作為生產伺服器使用。

SQL Server 2000 Windows CE 版
-----------------------------
使用 Microsoft SQL Server 2000 Windows CE 版 (SQL Server CE) 在 Windows CE 設備上進行數據 存儲。能用任何版本的 SQL Server 2000 復制數據,以使 Windows CE 數據與主資料庫保持同步。

SQL Server 2000 企業評估版
--------------------------
可從 Web 上免費下載的功能完整的版本。僅用於評估 SQL Server 功能;下載 120 天後該版本將停 止運行。

除了這些版本的 SQL Server 2000 之外,SQL Server 2000 Desktop Engine 組件允許應用程序開發 人員用他們的應用程序分發 SQL Server 2000 關系資料庫引擎的復本。因為 SQL Server 2000 Desktop Engine 中的資料庫引擎的功能與 SQL Server 各版本中的資料庫引擎相似,所以 Desktop Engine 資料庫的大小不能超過 2 GB。

SQL Server 2000 桌面版和 SQL Server 2000 個人版都有一個並發工作負荷調控器,可在並發執行 5 個以上的批處理時限制資料庫引擎的性能。有關並發工作負荷調控器的更多信息,請參見桌面上的 SQL Server 2000 資料庫。

熱點內容
解壓到當前文件夾右鍵 發布:2024-04-26 03:57:08 瀏覽:979
html5android教程視頻下載 發布:2024-04-26 03:09:59 瀏覽:867
伺服器的描述是什麼 發布:2024-04-26 03:08:32 瀏覽:394
個人加密 發布:2024-04-26 03:01:23 瀏覽:521
linuxusbgadget 發布:2024-04-26 02:52:54 瀏覽:304
我的世界空島世界伺服器地址 發布:2024-04-26 01:39:08 瀏覽:248
尼爾機械紀元加密 發布:2024-04-26 01:37:11 瀏覽:868
在控制台輸出sql語句 發布:2024-04-26 01:08:12 瀏覽:432
動畫java 發布:2024-04-26 01:02:40 瀏覽:12
得力文件夾5302 發布:2024-04-26 00:21:32 瀏覽:91