存储过程全文搜索

时间:2018-01-24 08:39:12

标签: c# sql-server full-text-search

我可以帮助下一步:

我的c#app调用sql存储过程,并传递一些搜索词(包含多个单词的字符串)。

    public List<ZapisModel> GetZapis_FullText(string Parametar)
    {
        using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(SQLConn.CnnVal(Program.db)))
        {
            var output = connection.Query<ZapisModel>("dbo.spZapis_GetByTest_FTC @parametar", new { parametar = Parametar }).ToList();
            return output;
        }
    }

Sql存储过程应该接受该传递的参数,并使用字符串中的每个单词进行全文搜索。我想让用户从字符串中搜索所有单词,对于字符串中的任何单词,这就是为什么我需要拆分字符串,并根据用户偏好使用AND或OR在搜索中包含每个单词。

此外,我希望这项工作完全在存储过程中完成。所以应用程序通过搜索项,存储过程处理它,并返回搜索结果。

1 个答案:

答案 0 :(得分:0)

我建议您不要在SQL过程级别解析搜索条件字符串。相反,使用C#准备正确的FTS搜索字符串。在我的项目中,我使用一个名为EasyFTS的小型(仅2个文件)免费软件库。

以下是旧的只读CodePlex EasyFTS项目页面:https://easyfts.codeplex.com/

GitHub存储库:https://github.com/SoftCircuits/Easy-Full-Text-Search

语法非常简单:

var fts = new EasyFts();
var orignalNonFTSEnabledQueryString = "Center Neck Spray Bottle";
var ftsEnabledsearchText = fts.ToFtsQuery(orignalNonFTSEnabledQueryString).

以上代码将转换正常的非FTS启用搜索字符串,例如。 Center Neck Spray Bottle到支持FTS的版本,如:

"(((FORMSOF(THESAURUS, Center) AND FORMSOF(THESAURUS, Neck)) AND FORMSOF(THESAURUS, Spray)) AND FORMSOF(THESAURUS, Bottle))"

您可以在CONTAINS / CONTAINSTABLEFREETEXT / FREETEXTTABLE条款中使用

EasyFTS类的许多配置选项。您可以使用由ANDOR分隔的单词的常规FTS查询字符串。只是检查他们的文档。

本文包含对EasyFTS的详尽描述:http://www.blackbeltcoder.com/Articles/data/easy-full-text-search-queries

免责声明:我不是EasyFTS图书馆的作者。

HTH