2011-03-15 17 views
0

我正在嘗試在SQL Server 2008上進行自由文本搜索。但是我有問題讓它工作。任何人都可以發現我的腳本中有什麼問題:SQL Server,我的自由文本搜索示例有什麼問題?

  • 它設置不正確嗎?
  • 我的查詢無效嗎?
  • 還有其他線索嗎?

爲什麼最後的查詢沒有結果?

---------------------------------------------------------------------------- 
-- Set up fulltext search 
---------------------------------------------------------------------------- 
IF FullTextServiceProperty('IsFullTextInstalled') <> 1 
BEGIN 
    PRINT 'Full Text Service is not installed, script is aborted.' 
    RETURN 
END 

IF DatabaseProperty(DB_NAME(), 'IsFulltextEnabled') <> 1 
    EXEC sp_fulltext_database 'enable' 

IF NOT EXISTS 
(
    SELECT 1 
    FROM sys.fulltext_catalogs (NOLOCK) 
    WHERE name = 'searchcatalog_test' 
) 
BEGIN 
    CREATE FULLTEXT CATALOG searchcatalog_test 
    WITH ACCENT_SENSITIVITY = OFF 
END 


---------------------------------------------------------------------------- 
-- Set up table 
---------------------------------------------------------------------------- 
IF OBJECT_ID('freetext_test', 'U') IS NOT NULL 
BEGIN 
    EXEC SP_FULLTEXT_TABLE 'freetext_test', 'DROP' 
    DROP TABLE freetext_test 
END 

CREATE TABLE dbo.freetext_test 
(
    freetext_id INT IDENTITY 
, freetext_data NVARCHAR(MAX) 
    CONSTRAINT pk_freetext_test PRIMARY KEY (freetext_id) 
) 

CREATE FULLTEXT INDEX ON freetext_test 
(
    freetext_data LANGUAGE 0 -- 0 = Neutral 
) 
KEY INDEX pk_freetext_test ON searchcatalog_test 
WITH CHANGE_TRACKING AUTO 

INSERT INTO freetext_test(freetext_data) 
     SELECT N'Some text to test free text searching' 
UNION SELECT N'Another text to test with' 
UNION SELECT N'Another test string' 
UNION SELECT N'Today is a sunny day' 
UNION SELECT N'I wonder if anyone at StackOverflow can help me?' 


---------------------------------------------------------------------------- 
-- Test section 
----------------------------------------------------------------------------  
SELECT * FROM freetext_test 

SELECT * FROM freetext_test WHERE FREETEXT (freetext_data, N'test') 
SELECT * FROM freetext_test WHERE FREETEXT (freetext_data, N'string') 
SELECT * FROM freetext_test WHERE FREETEXT (freetext_data, N'sunny') 
SELECT * FROM freetext_test WHERE FREETEXT (freetext_data, N'StackOverflow') 

SELECT * FROM freetext_test WHERE CONTAINS (freetext_data, N'text OR test') 
SELECT * FROM freetext_test WHERE CONTAINS (freetext_data, N'string OR another') 
SELECT * FROM freetext_test WHERE CONTAINS (freetext_data, N'today AND sunny') 
SELECT * FROM freetext_test WHERE CONTAINS (freetext_data, N'anyone AND StackOverflow') 

回答

1

你的腳本就像一個魅力。

難道你是在執行SELECT時太快,索引引擎無法生成目錄?

+0

是的!你是絕對正確的!謝謝。 – Uhlen 2011-03-15 11:24:58