全文搜索不起作用(FREETEXT - CONTAINS)

时间:2014-07-14 15:09:32

标签: sql sql-server full-text-search contains freetext

Freetext不会返回表中的所有单词。并且包含不起作用

我有一行包含在mycolumn =“国王的生活”中

我尝试了2种方法; 首先“包含”

SELECT * FROM MYTABLE WHERE CONTAINS(MYCOLUMN,'Life NEAR of NEAR a NEAR King')

它返回NOTHING

第二

SELECT * FROM MYTABLE WHERE FREETEXT(MYCOLUMN,'Life of a King')

它返回237行! 这是;

  

“馅饼的生活”,“这是一个美好的生活”,“狮子王”,“亚瑟王”,“生活故事”,“国王的生活”等...

我想要返回仅包含“Life”+“of”+“a”+“King”字样的行。

感谢您的回复!

2 个答案:

答案 0 :(得分:0)

我假设全文字段是nvarchar。

以下是我的例子:

CREATE TABLE [dbo].[FullTextTable](
    [ID] [int] NOT NULL PRIMARY KEY,
    [FullTextField] [nvarchar](max) NOT NULL
    );
GO

CREATE FULLTEXT INDEX ON FullTextTable([FullTextField]) 
   KEY INDEX [PK_FullTextTable]
   WITH STOPLIST = SYSTEM;
GO

以下查询返回准确值:

SELECT FullTextField
FROM FullTextTable
WHERE
CONTAINS 
(FullTextField, N'"Life NEAR of NEAR a NEAR King"' );
GO

答案 1 :(得分:0)

您必须考虑以下几点

  1. 您要搜索的列应该有 FULLTEXT INDEX

  2. 检查表中是否存在搜索词

    SELECT * FROM sys.dm_fts_index_keywords(DB_ID('your_DB_Name'), OBJECT_ID('_your_table_Name')) 其中 display_term 像 '%your_searching_keyword%'

  3. “更改跟踪”属性应设置为“自动”。如果创建索引后要在表中添加或删除行或表中的数据不是静态的。