标签: containstable

SQL Server,ISABOUT,加权术语

我试图弄清楚加密术语在SQL SERVER中的ISABOUT查询中的确切工作方式.这是我目前所处的位置:

每个查询都返回以下行:

QUERY 1(重量1): 初始排名

SELECT * FROM CONTAINSTABLE(documentParts, title, 'ISABOUT ("e" weight (1) ) ') ORDER BY RANK DESC, [KEY]

KEY     RANK
306342  249
272619  156
221557  114
Run Code Online (Sandbox Code Playgroud)

QUERY 2(权重0.8): 排名增加,保留初始订单

SELECT * FROM CONTAINSTABLE(documentParts, title, 'ISABOUT ("e" weight (0.8) ) ') ORDER BY RANK DESC, [KEY]

 KEY     RANK
 306342  321
 272619  201
 221557  146
Run Code Online (Sandbox Code Playgroud)

QUERY 3(权重0.2): 排名增加,保留初始订单

SELECT * FROM CONTAINSTABLE(documentParts, title, 'ISABOUT ("e" weight (0.2) ) ') ORDER BY RANK DESC, [KEY]

 KEY    RANK
 306342 998 …
Run Code Online (Sandbox Code Playgroud)

sql sql-server full-text-search containstable isabout

8
推荐指数
2
解决办法
6201
查看次数

contains和containstable之间有显着差异吗?

我在启用了文件流的varchar(max)类型的列上创建了全文索引。文件流包含诸如JPG,TIF,PDF和XML的数据(尽管我认为这与问题几乎无关)。

我创建了两个查询,这些查询使我可以搜索索引。

全文搜索#1--

select
      parentObj.ObjectID as 'GroupingID',
      parentObj.Name as 'Grouping',
      childObj.ObjectID as 'FileObjID', 
      childObj.Name as 'FileName',
      fs.FileStreamID
    from dbo.dat_FileStream fs
    inner join dbo.dat_Object childObj
        on fs.ObjectID = childObj.ObjectID
    inner join dbo.dat_Collection c
        on fs.ObjectID = c.ObjectID
    inner join dbo.dat_Object parentObj
        on c.ParentID = parentObj.ObjectID
    where contains(FileStreamData, @srchTerm)
        and parentObj.ObjectTypeID = 1
    ORDER BY 'Grouping'
Run Code Online (Sandbox Code Playgroud)

全文搜索#2--

select
      KEY_TBL.RANK,
      parentObj.ObjectID as 'GroupingID',
      parentObj.Name as 'Grouping',
      childObj.ObjectID as 'FileObjID',
      childObj.Name as 'FileName',
      fs.FileStreamID
    from dbo.dat_FileStream fs
    inner join containstable(dbo.dat_FileStream, FileStreamData, @srchTerm, 1000) as …
Run Code Online (Sandbox Code Playgroud)

t-sql full-text-search contains containstable

6
推荐指数
1
解决办法
3058
查看次数

CONTAINSTABLE如何与许多搜索词一起使用

例如我有一张桌子Companies.其中有一个字段FullName,我有一个全文索引.然后,我加入一个表CONTAINSTABLE@search_word"company*" AND "name*" AND "oil*" AND "propan*" AND "liquid*"...从1到10个字.

而且我知道单词(带变体*)得到了这么多匹配:

  • 公司 - 10k
  • 名字 - 5k
  • 油 - 2k
  • propan - 1k
  • 液体 - 500
  • 以上所有单词排成一排 - 300场比赛

所以,如果我按顺序搜索:

@search = '"company*" AND "name*" AND "oil*" AND "propan*" AND "liquid*"'

并按此顺序:

@search = '"liquid*" AND "propan*" AND "oil*" AND "name*" AND "company*"'

SELECT [FullName]
FROM dbo.Companies c
INNER JOIN CONTAINSTABLE (dbo.Companies, [FullName], @search) as s ON s.[KEY] = …
Run Code Online (Sandbox Code Playgroud)

sql-server full-text-search containstable

5
推荐指数
1
解决办法
427
查看次数

SQL Server - 使用空关键字进行自由文本搜索

下面是我的SQL查询的简化版本,它使用CONTAINSTABLE进行全文搜索.

DECLARE @pSearchFor AS NVARCHAR(100);
SET @pSearchFor = 'SomeKeyword';

SELECT MS.[ModuleScreenID] AS ScreenID
    ,MS.[ModuleScreenCode] AS ScreenCode
    ,M.[Description] AS ModuleDescription
    ,M.[ModuleCode] AS ModuleCode        
    ,FT.[Rank] 
FROM ModuleScreen MS
    JOIN Module M ON MS.ModuleID = M.ModuleID
    JOIN CONTAINSTABLE(ModuleScreen, *, @pSearchFor) FT ON MS.ModuleScreenID = FT.[KEY]
Run Code Online (Sandbox Code Playgroud)

我想为@pSearchFor参数传递空值或空值,以便通过全文搜索返回所有记录.但是当我传递空值或空值时,我得到一个"空或空全文谓词"错误.谷歌搜索后,我发现CONTAINSTABLE不能为关键字取一个空参数.我也在SO中看过这个问题,但它对我没有帮助.

我可以使用CONTAINSTABLE进行条件连接(仅当为@pSearchFor参数指定了值时)吗?我不知道如何实现这一目标.非常感谢任何指针.

sql-server full-text-search containstable sql-server-2008

5
推荐指数
1
解决办法
5045
查看次数

如何在CONTAINSTABLE中使用列名作为搜索条件?

我很惊讶地发现,它们都不支持CONTAINSCONTAINSTABLE似乎不支持以下语法,您在其中为最后一个Search Condition参数传递了列名。

SELECT *
FROM dbo.Articles AS a
WHERE EXISTS
(
   SELECT *
   FROM dbo.Terms AS t
   INNER JOIN CONTAINSTABLE(dbo.Articles, (ArticleBody), t.FulltextTerm)
      AS ct ON ct.[Key] = a.ArticleId
)
Run Code Online (Sandbox Code Playgroud)

上面的查询返回“ t附近的语法不正确”错误消息。

Terms表包含带有一行的多行FulltextTerm,并且如果FulltextTermArticleBody 中包含这些值中的任何一个,则该值应为匹配项,以便选择特定的Article。这就是我要实现的目标。

CONTAINS并且CONTAINSTABLE似乎仅支持字符串文字或变量作为“搜索条件”参数,这是非常有限的。如果那是唯一的选择,则它需要更多的代码,并且如果我需要Terms使用游标或循环遍历表,肯定会慢很多。

我是否在这里缺少技巧或有人可以建议的任何解决方法-最好是基于集合的解决方案,即避免循环。

t-sql sql-server full-text-search containstable sql-server-2008-r2

5
推荐指数
1
解决办法
940
查看次数

忽略 SQL Server 中全文搜索 (FREETEXTTABLE) 搜索列中的破折号 (-)

CONTAINSTABLE用于我的搜索算法。我想在特定列值中忽略破折号来搜索列值。例如,列包含 '12345-67' 那么它应该使用 '1234567' 进行搜索,如下查询。

SELECT * 
FROM table1 AS FT_Table
INNER JOIN CONTAINSTABLE(table2, columnname, '1234567') AS Key_Table ON FT_Table.ID = Key_Table.[Key]
Run Code Online (Sandbox Code Playgroud)

在搜索不包含破折号 (-) 的字符串时,有没有办法忽略破折号 (-)?

sql-server full-text-search freetexttable containstable sql-server-2014

5
推荐指数
0
解决办法
969
查看次数

为什么 SQL Server 全文搜索不匹配数字?

我正在使用 SQL Server 2014 Express,并在表上设置了全文索引。

全文索引仅索引单个列,在此示例中名为foo.

该表中有 3 行。3 行中的值,对于全文索引列,就像这样......

test 1
test 2
test 3 test 1
Run Code Online (Sandbox Code Playgroud)

上面的每一行都是表中的一个新行,该文本实际上就是全文索引列中的内容。因此,使用 SQL Server 的CONTAINS函数,如果我执行以下查询,我会按预期将所有行作为匹配项返回。

SELECT * FROM example WHERE CONTAINS(foo, 'test')
Run Code Online (Sandbox Code Playgroud)

但是,如果我运行以下查询,我也会将所有行作为匹配项返回,这是我不期望的。在以下查询中,我只希望有一行作为匹配项。

SELECT * FROM example WHERE CONTAINS(foo, '"test 3"')
Run Code Online (Sandbox Code Playgroud)

最后,简单地搜索“3”不会返回匹配的行,这也是我没想到的。我希望以下查询中有一个匹配的行,但没有。

SELECT * FROM example WHERE CONTAINS(foo, '3')
Run Code Online (Sandbox Code Playgroud)

我已经阅读了 MSDN 页面CONTAINS和全文索引,但我无法弄清楚这种行为。我一定做错了什么。

有人能向我解释发生了什么以及如何执行我所描述的搜索吗?

sql sql-server full-text-search contains containstable

4
推荐指数
1
解决办法
7495
查看次数

全文搜索语法错误

我使用目录和索引创建了一个全文搜索,当我运行一个如下所示的单词查询时,包含查询工作正常.

SELECT Name
FROM dbo.Gifts
WHERE CONTAINS(Name, 'gift')
Run Code Online (Sandbox Code Playgroud)

它返回'测试礼物'

我在表中只有一行,而Name列中的数据如下所示:'test gift'

但是当我用这个语句运行conaints查询时:

SELECT Name
FROM dbo.Gifts
WHERE CONTAINS(Name, 'test gift')
Run Code Online (Sandbox Code Playgroud)

它会抛出错误说明:全文搜索条件"测试礼物"中"礼物"附近的语法错误.

我认为包含可以查询短语和多个匹配和听起来相似的单词?

sql-server full-text-search containstable sql-server-2014-express

2
推荐指数
1
解决办法
2849
查看次数

如何在 MS SQL Server 上的 Containstable 中强调不敏感的全文搜索

我正在尝试更新存储过程以便能够比较不区分重音的数据。当前存储过程使用 Containstable 进行全文搜索,但比较是重音敏感的。是否有机会为包含表设置排序规则(例如Latin1_General_CI_AI)?

db 的排序规则区分重音。

我正在使用 MS SQL Server 2012 Express。

t-sql containstable sql-server-2012

1
推荐指数
1
解决办法
1663
查看次数