我可以帮助下一步:
我的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在搜索中包含每个单词。
此外,我希望这项工作完全在存储过程中完成。所以应用程序通过搜索项,存储过程处理它,并返回搜索结果。
答案 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 / CONTAINSTABLE或FREETEXT / FREETEXTTABLE条款中使用
。 EasyFTS类的许多配置选项。您可以使用由AND
或OR
分隔的单词的常规FTS查询字符串。只是检查他们的文档。
本文包含对EasyFTS的详尽描述:http://www.blackbeltcoder.com/Articles/data/easy-full-text-search-queries。
免责声明:我不是EasyFTS图书馆的作者。
HTH