如何在我的数据库中进行全文搜索

How can I do a full text search in my databse

我的 C# 应用程序调用 sql 名为 Search 的存储函数,并传递一些搜索词。我正在使用 EasyFTS 库,可在此处获得:https://www.blackbeltcoder.com/Articles/data/easy-full-text-search-queries

所以应用程序传递一个搜索词,存储函数处理它,returns 搜索结果。

我的 table 值函数如下所示:

ALTER FUNCTION [dbo].[Search] 

(

    @locale NVARCHAR(10),
    @searchTerm NVARCHAR(450)
)
RETURNS 
@retSearch TABLE 
(
    [Id] INT NOT NULL,

    [Table] NVARCHAR(100)  NOT NULL,
    [Title] NVARCHAR(MAX) NOT NULL,
    [Summary] NVARCHAR(MAX) NOT NULL,
    [Rank] INT NOT NULL,
    [Parameters] NVARCHAR(MAX) NOT NULL,
    PRIMARY KEY ([Id],[Table])
)
AS
BEGIN
    
    IF @locale = N''
    BEGIN
        SET @locale = N'en'
    END
    INSERT @retSearch 
    SELECT Id,[Table],[Title],[Summary], RANK  [Rank],[Parameters]
    FROM dbo.FTSData  EP
    INNER JOIN
    CONTAINSTABLE(dbo.FTSData,Content,
            @searchTerm) AS KEY_TBL
              ON EP.IdFtsData = KEY_TBL.[KEY]
              WHERE EP.LocaleId=@locale
              ORDER BY RANK DESC

   RETURN

END

问题是搜索结果无法搜索到部分单词。 示例:FORMSOF(INFLECTIONAL, powershe), 将找不到包含单词 powershell 的内容。

我尝试使用 LIKE 并在函数中添加一个新变量,并在搜索值的两边连接 % SET @searchTermFun = '%'+@searchTerm+'%' 并且适用于数据库端 (SSMS)。 但是当我尝试在我的函数中实现它时它不起作用。是 CONTAINSTABLE 中的问题吗?

测试示例:

DECLARE @SearchTerm AS NVARCHAR(50), @locale AS NVARCHAR(10), @searchTermFun AS NVARCHAR(450)
SET @SearchTerm = 'course'
SET @SearchTermFun = '%'+@SearchTerm+'%'
SET @locale = 'en'
SELECT Id,[Table],[Title],[Summary],[Parameters], LocaleId
FROM dbo.FTSData  EP
WHERE  EP.LocaleId=@locale AND Content LIKE @SearchTermFun
ORDER by [Table] DESC 

找到解决方案,我在我的 .NET Core 应用程序中使用 StringBuilder class 在搜索字符串的末尾添加了一个星号 (*)。它解决了我的问题。

本页有说明:

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/17653360-2c72-4647-96f0-d3a2a9e67f0e/searching-partial-and-or-full-word-from-fulltext-search-those-might-be-precise-or-fuzzy-less?forum=transactsql

谢谢大家@Charlieface