C# 如何在数据库中进行全文搜索

C# 如何在数据库中进行全文搜索,c#,tsql,asp.net-core-mvc,C#,Tsql,Asp.net Core Mvc,我的c#应用程序调用名为Search的sql存储函数,并传递一些搜索词。我正在使用EasyFTS图书馆,这里有: 因此,应用程序传递一个搜索词,存储函数处理它,并返回搜索结果 我的表值函数如下所示: ALTER FUNCTION [dbo].[Search] ( @locale NVARCHAR(10), @searchTerm NVARCHAR(450) ) RETURNS @retSearch TABLE ( [Id] INT NOT NULL,

我的c#应用程序调用名为Search的sql存储函数,并传递一些搜索词。我正在使用EasyFTS图书馆,这里有:

因此,应用程序传递一个搜索词,存储函数处理它,并返回搜索结果

我的表值函数如下所示:

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(屈折,powershe)找不到包含powershell一词的内容

我尝试使用LIKE并在函数中添加一个新变量,并在搜索值的两侧连接% 设置@searchTermFun='%'+@searchTerm+'%',这在数据库端(SSMS)工作。 但是当我尝试在我的函数中实现它时,它不起作用。中的问题是否稳定

测试示例:

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核心应用程序中使用StringBuilder类在搜索字符串的末尾添加了一个星号(*)。它解决了我的问题

本页对此进行了说明:


无论如何,谢谢

全文搜索不是为部分单词设计的,不知道你为什么会这样想。此外,如果使用内联TV函数
将表作为返回(选择…
返回),而不是多语句函数,它的性能可能会更好