【问题标题】:How can I do a full text search in my databse如何在我的数据库中进行全文搜索
【发布时间】:2021-07-23 14:54:55
【问题描述】:

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

所以应用程序传递一个搜索词,存储函数对其进行处理,并返回搜索结果。

我的表值函数如下所示:

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 

【问题讨论】:

  • 全文搜索不是为部分词设计的,不知道你为什么这么认为。此外,如果您使用内联电视功能 RETURNS TABLE AS RETURN(SELECT ...) 而不是多语句功能,它可能会表现得更好

标签: c# tsql asp.net-core-mvc


【解决方案1】:

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

在这个页面上有解释:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 2011-10-02
    • 2016-02-21
    • 1970-01-01
    • 2020-10-25
    相关资源
    最近更新 更多