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

在C#/Entity框架中编写全文搜索算法-从哪里开始?,c#,entity-framework,full-text-search,C#,Entity Framework,Full Text Search,我需要搜索大量可能的句子,但我不知道从哪里开始 总之,用户将提交一个搜索短语,例如“如何删除我的帐户”,然后我需要转到数据库并与提供的单词进行匹配 目前,我正在考虑做如下事情: 分词 删除非常常见的单词(和、如果等) 以某种方式按优先顺序排列单词(不知道怎么做) 使用EF循环遍历单词,在每个db上执行字符串.Contains 录音和文字 如果未找到结果,请删除一些优先级较低的字并 再次搜索 重复 谁能给我指一下正确的方向吗?如果有人知道任何图书馆可以做这种工作,那就太好了 干杯至于单词的优先

我需要搜索大量可能的句子,但我不知道从哪里开始

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

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

  • 分词
  • 删除非常常见的单词(和、如果等)
  • 以某种方式按优先顺序排列单词(不知道怎么做)
  • 使用EF循环遍历单词,在每个db上执行字符串.Contains 录音和文字
  • 如果未找到结果,请删除一些优先级较低的字并 再次搜索
  • 重复
谁能给我指一下正确的方向吗?如果有人知道任何图书馆可以做这种工作,那就太好了


干杯

至于单词的优先顺序,简单但相当有效的解决方案是根据它们的流行程度对它们进行排序(也许可以根据数据库中的文章创建流行度指数),这样在文本中罕见的单词就更重要了,这样你就可以增加不太一般的单词

这里的另一个问题是,你可能有不同形式的单词,比如过去式/将来式,因此你可能会对它们感兴趣,据我记忆所及,一个移植到c#的工具是Snowball project


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

使用全文搜索将查询包装到存储过程。通过ADO.NET或EF执行存储过程。

万一有人遇到这个问题并想知道我最后使用了什么,我就使用了Lucene.NET。它非常棒,非常容易安装和使用,因为它功能强大,功能强大。不过,我要说的一件事是,文档不是很好。然而,我发现了一系列的教程,这是一个很好的介绍。我花了一个上午浏览这些文章,在我的应用程序中,我的全文索引/搜索速度快得离谱

你真的想写全文搜索,还是使用一个就足够了?如果使用它就足够了,你可以使用Lucene.net解决这个问题。我宁愿使用一个,而不是正确的。但是,如果可能的话,我更喜欢在SQL中进行搜索,我真的不想每次需要搜索时都返回完整的记录集。我要看看Lucene,看看它是否合适,如果你的问题是由于Ravadre的努力而解决的,你应该考虑将提供的答案标记为正确的,而不是你自己最后的成功报告。这会奖励他们花时间帮助您找到解决方案。否则,你只是在拍自己的背,寻求别人的帮助-真的,不知道我为什么这么做?!