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

时间:2011-12-15 15:03:48

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

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

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

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

  • 将短语分为单个单词
  • 删除非常常见的单词(以及if,等等)
  • 以某种方式按优先级排序单词(不知道如何做到这一点)
  • 通过单词使用EF循环,在每个数据库上执行String.Contains 记录和单词
  • 如果未找到任何结果,请删除一些优先级较低的单词和 再次搜索
  • 重复

有人能指出我正确的方向吗?此外,如果有人知道任何图书馆做这种工作会很棒。

干杯

3 个答案:

答案 0 :(得分:6)

对于单词的优先级排序,简单但非常有效的解决方案是根据它们的受欢迎程度对它们进行排序(也许可以根据数据库中的文章创建流行度指数),这样在文本中很少见的单词更重要,这样你可以提高一般性的话语。

这里的其他问题是,您可能会有不同形式的单词,例如过去/将来时,因此您可能对stemming感兴趣,一个移植到c#的工具是Snowball项目到目前为止我记得。

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

答案 1 :(得分:3)

万一有人碰到这个并想知道我最后使用了什么,我最终使用了Lucene.NET。它非常棒,非常容易设置和使用,因为它非常强大并且增加了如此强大的功能。我要说的一件事是文档不是很好。但是,我确实找到了一系列教程here,这是一个很好的介绍。我花了一个上午阅读这些文章,并且在我的应用程序中进行了快速的全文索引/搜索!

答案 2 :(得分:2)

使用SQL server full text search capability并使用全文搜索将查询包装到存储过程。通过ADO.NET或EF执行存储过程。