【问题标题】:SQL - FULLTEXT INDEXSQL - 全文索引
【发布时间】:2015-05-29 02:25:00
【问题描述】:

我目前正在尝试添加一个全文索引,以便能够在包含关键词的叙述列中搜索关键词。我尝试了许多不同的教程,虽然我完全复制了它们,但在“WHERE”部分中使用“CONTAINS”功能时,我无法复制结果。

下面是我的脚本示例,我一直在使用一些示例数据。有人可以向我解释为什么这不起作用,因为我正在努力寻找错误所在。

CREATE TABLE dbo.AAAA_FullTextTest5
    (ID INT Identity(1, 1) NOT NULL
    ,LOCATION VARCHAR (255)
    ,NARRATIVE VARCHAR(MAX)
    )

ALTER TABLE dbo.AAAA_FullTextTest5 add constraint PK_FullTextTest5 PRIMARY KEY (ID)

INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('USA Texas', 'WRIGHT BROTHERS')
INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('Worldwide', 'CROWN PROS Builders LTD')
INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('Devon United Kingdom', 'J PJH ROOFING LTD')
INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('UK', 'Shoreham Port Authority and Shoreham Port Developments & The Port of Shoreham Trustees ')
INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('EUROPE AND RUSSIA', 'ZHY SERVICES')
INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('Austrialia', 'BrotherLimited')
INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('ASIA', 'DRILLING SERVICES LTD')
INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('JAPAN', 'BROOKS WASTE LTD')
INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('Melbourne', 'TRC Service Company')
INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('GERMANY & HOLLAND', 'Samson Group')
INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('Frankfurt', 'SCAFFOLDING LTD')
INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('Swindon, England', 'Scaffold Access Ltd')

CREATE FULLTEXT CATALOG FullTextTest5

CREATE FULLTEXT INDEX ON dbo.AAAA_FullTextTest5 (
             Location language 1033
            ,Narrative language 1033)
KEY INDEX PK_FullTextTest5 ON FullTextTest5
WITH CHANGE_TRACKING AUTO

SELECT * FROM dbo.AAAA_FullTextTest5 
WHERE CONTAINS(NARRATIVE, 'Access')

【问题讨论】:

  • 哪个 dbms? (这是产品特定的功能......)
  • 你能澄清为什么它不起作用吗?有任何错误,或者只是不是您期望的结果(如果有,它们是什么)?
  • 运行时没有出现错误。它只是没有返回结果,我无法理解为什么至少有一个结果带有“访问”一词。
  • 嗨@jarlh,如果这就是你所追求的,这是数据库版本? (无列名)Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 2011 年 6 月 17 日 00:54:03 版权所有 (c) Windows NT 6.1 上的 Microsoft Corporation Enterprise Edition(64 位)(内部版本) 7601:服务包 1)

标签: sql sql-server full-text-search full-text-indexing full-text-catalog


【解决方案1】:

根据此处的说明:https://msdn.microsoft.com/en-us/library/ms142497.aspx,以下在我本地安装的 SQL Server 2008 R2 以及我本地安装的 SQL Server 2012 中似乎可以正常工作:

CREATE TABLE dbo.AAAA_FullTextTest5
    (ID INT Identity(1, 1) NOT NULL
    ,LOCATION VARCHAR (255)
    ,NARRATIVE VARCHAR(MAX)
    )
GO

CREATE UNIQUE INDEX UI_AAAA_FullTextTest5 ON dbo.AAAA_FullTextTest5(ID)
GO

INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('USA Texas', 'WRIGHT BROTHERS')
INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('Worldwide', 'CROWN PROS Builders LTD')
INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('Devon United Kingdom', 'J PJH ROOFING LTD')
INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('UK', 'Shoreham Port Authority and Shoreham Port Developments & The Port of Shoreham Trustees ')
INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('EUROPE AND RUSSIA', 'ZHY SERVICES')
INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('Austrialia', 'BrotherLimited')
INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('ASIA', 'DRILLING SERVICES LTD')
INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('JAPAN', 'BROOKS WASTE LTD')
INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('Melbourne', 'TRC Service Company')
INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('GERMANY & HOLLAND', 'Samson Group')
INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('Frankfurt', 'SCAFFOLDING LTD')
INSERT INTO dbo.AAAA_FullTextTest5 (LOCATION, NARRATIVE) VALUES ('Swindon, England', 'Scaffold Access Ltd')
GO

CREATE FULLTEXT CATALOG AAAA_FTCat;
GO

CREATE FULLTEXT INDEX ON AAAA_FullTextTest5
(
    NARRATIVE                         --Full-text index column name 
    Language 2057                 --2057 is the LCID for British English
)
KEY INDEX UI_AAAA_FullTextTest5 ON AAAA_FTCat --Unique index
WITH CHANGE_TRACKING AUTO            --Population type;
GO

有了上面的设置,我就可以查询了:

SELECT * FROM AAAA_FullTextTest5
WHERE CONTAINS(NARRATIVE, 'Access')

并得到这个结果集:

ID    LOCATION            NARRATIVE
12    Swindon, England    Scaffold Access Ltd

【讨论】:

  • 嗨,保罗,谢谢您的回答。不幸的是,这似乎仍然不适用于 2012 年。
  • @bwsutton 您确定您已正确复制代码吗?我也可以使用相同的结果集对我的本地 SQL Server 2012 副本运行它。
  • 嗨 Paul 是的,我确信我已经正确复制了它,只是让我的同事跟着我检查。我现在试了几次,不幸的是仍然得到 0 行。
  • @bwsutton 好吧,让我难过。我无法重现您描述的行为。如果全文索引创建成功,SELECT 查询总是在我的机器上返回预期的结果。我不相信一旦为它创建了全文索引,甚至没有办法在表上禁用全文搜索。如果未安装语言或分词器,则创建索引时会出错。我不知道如何成功创建索引但查询不返回任何结果。
  • 我知道这很令人困惑。我检查了安装配置,一切似乎都正常,这就是索引运行的原因,正如你所说的那样。感谢您的帮助
猜你喜欢
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 1970-01-01
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
相关资源
最近更新 更多