sql server上多列的全文搜索

sql server上多列的全文搜索,sql,sql-server,Sql,Sql Server,我有下表 Id Author 1 Alexander Mccall Smith 2 Ernest Hemingway 3 Giacomo Leopardi 4 Henry David Thoreau 5 Mary Higgins Clark 6 Rabindranath Tagore 7 Thomas Pynchon 8 Zora Neale Hurston 9 William S. Burroughs 10 Virginia Woolf 11 Will

我有下表

Id  Author
1   Alexander Mccall Smith
2   Ernest Hemingway
3   Giacomo Leopardi
4   Henry David Thoreau
5   Mary Higgins Clark
6   Rabindranath Tagore
7   Thomas Pynchon
8   Zora Neale Hurston
9   William S. Burroughs
10  Virginia Woolf
11  William tell
我想通过输入名字和姓氏的前几个字符来搜索作者

eg: Search Text: Will tel
Then the search result show the following result
iam电话l

eg: Search Text: will Burrou
Then the search result show the following result
iam S.Burroughs

例如:搜索文本:Will 然后搜索结果显示以下结果

威尔我是巴勒斯 我会告诉你的


在sql server中实现这一目标的有效方法是什么

如您所述,这可以通过全文搜索实现。您必须创建FTS目录,然后在表和列上建立索引。您在标题“Columns”中进行了说明,但我在示例中只看到一个表列,因此我将使用它创建查询

-- example 1 searching on Will and Tel
SELECT Id, Author
FROM Authors
WHERE CONTAINS(Author, '"Will*" AND "tel*"')

-- example 2 searching on Will and Burrou
SELECT Id, Author
FROM Authors
WHERE CONTAINS(Author, '"will*" AND "Burrou*"')

-- example 3 searching on Will
SELECT Id, Author
FROM Authors
WHERE CONTAINS(Author, '"will*"')
有关更多参考,请参阅

  • 搜索精确或模糊匹配的子句
  • 文章

如您所述,这可以通过全文搜索实现。您必须创建FTS目录,然后在表和列上建立索引。您在标题“Columns”中进行了说明,但我在示例中只看到一个表列,因此我将使用它创建查询

-- example 1 searching on Will and Tel
SELECT Id, Author
FROM Authors
WHERE CONTAINS(Author, '"Will*" AND "tel*"')

-- example 2 searching on Will and Burrou
SELECT Id, Author
FROM Authors
WHERE CONTAINS(Author, '"will*" AND "Burrou*"')

-- example 3 searching on Will
SELECT Id, Author
FROM Authors
WHERE CONTAINS(Author, '"will*"')
有关更多参考,请参阅

  • 搜索精确或模糊匹配的子句
  • 文章

随着表格大小的增加,效率低于@Igor的答案,但您也可以像使用
语句一样使用

LIKE运算符在WHERE子句中用于搜索列中的指定模式

缺点:它比contains语句慢。您需要在要搜索的任何其他关键字后面包含
%
符号


优点:当表大小增加时,如果比@Igor的答案效率更低(则比contains语句更快),但是您也可以像使用
语句一样使用
语句

LIKE运算符在WHERE子句中用于搜索列中的指定模式

缺点:它比contains语句慢。您需要在要搜索的任何其他关键字后面包含
%
符号


优点:在较小的情况下可以比contains语句更快(因为你问题的标题似乎暗示你知道全文搜索,你可以使用全文搜索?虽然我不确定它在昵称和部分词方面的表现如何…我知道它在同义词和过滤词方面效果很好。你可能只需要使用“like”如果FTS不符合您的目的。您的问题标题意味着在多个列上搜索,但问题正文根本没有显示这一点,有点不清楚。如果您可以建立一个
作者的一般模式(例如只有一个中间名,没有前缀/后缀)你应该能够使用正则表达式。有没有可能你想要一个名字参数和一个姓氏参数,而不是一个全文参数?因为你的问题的标题似乎暗示你知道全文搜索,你可以使用全文搜索?尽管我不确定它在昵称和部分单词方面的性能如何…我知道它可以很好地用于同义词和过滤词。如果FTS不符合您的目的,您可能只需要使用“like”。您的问题标题意味着要搜索多个列,但问题的主体根本没有显示这一点,有点不清楚。如果您能建立
作者
(如只有一个中间名,没有前缀/后缀)你应该能够使用正则表达式。有没有可能你想要一个名字参数和一个姓氏参数,而不是一个全文参数?谢谢Igor,我一直在寻找FTS的这种简短解释谢谢Igor,我也一直在寻找FTS的这种简短解释