c# - 在 C#/Entity Framework 中编写全文搜索算法 - 从哪里开始?

标签 c# entity-framework full-text-search

我需要搜索一个可能很大的句子集合,但我不知道从哪里开始。

总而言之,用户将提交一个搜索词组,例如“我如何删除我的帐户”,然后我需要转到数据库并与提供的词进行匹配。

目前我正在考虑做如下事情:

  • 将短语拆分为单个单词
  • 删除非常常用的词(and、if 等)
  • 以某种方式按优先级排序单词(还不知道该怎么做)
  • 使用 EF 循环遍历单词,对每个数据库执行 String.Contains 记录和文字
  • 如果没有找到结果,删除一些优先级较低的词和 再次搜索
  • 重复

谁能指出我正确的方向?另外,如果有人知道任何用于执行此类工作的库,那就太好了。

干杯

最佳答案

至于确定单词的优先级,简单但非常有效的解决方案是根据它们的受欢迎程度对它们进行排序(也许可以根据数据库中的文章创建流行指数),这样在你的文本中不常见的单词就更重要了,这样您可以提升不太笼统的词。

这里的另一个问题是,您可能有不同形式的单词,例如过去时/将来时,因此您可能对 stemming 感兴趣据我所知,移植到 c# 的一个工具是 Snowball 项目。

至于做你问题的第二部分,循环单词可能非常低效,我认为你应该考虑使用一些索引库/解决方案。一,.net 流行的是 Lucene.Net .它基本上创建反向索引,将某些短语(如单词)映射到包含它们的文章,这使您可以快速找到文本中给定单词的所有出现。类似的方法可以在你的数据库中由你自己实现

关于c# - 在 C#/Entity Framework 中编写全文搜索算法 - 从哪里开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8522109/

相关文章:

solr - Solr 的 MoreLikeThis 组件如何在内部工作以获得结果?

elasticsearch - Elasticsearch 优先搜索以搜索词开头的结果

c# - 如果类型为 "object"的对象指向层次结构中的正确实例,为什么我需要显式向下转换?

c# - 部署c# win form应用程序的兼容性问题

c# - 在 ASP.Net C# 中使用 JavaScript 将日历对象传递给服务器端方法

c# - "volatile"关键字是做什么用的?

asp.net-mvc - MVC 5 - 记录数据库中的插入和更新

linq - 使用 DefaultIfEmpty 改进 Linq 子查询

javascript - 加载分页数据时行数性能影响,有什么想法吗?

mysql - 如何提高mysql全文准确率?