有关实施全文检索表格的文章和建议

时间:2009-10-28 12:36:07

标签: c# full-text-search

我需要为电子邮件/支持票据数据库(在C#中)创建一个全文搜索表单,我正在寻找有关如何处理此问题的建议和文章。特别是我想知道如何处理经典的全文搜索问题,例如:

  • 确保匹配是明智的,例如,如果有人输入“大头”并且文档包含“大毛头”,请确保在搜索中返回该文档。
  • 按相关性排序结果。
  • 如何投注显示匹配项,例如突出显示匹配的字词

我知道全文搜索本身就是一个相当庞大的主题领域,我只是在寻找关于如何创建至少有用且可用的东西的简单文章和建议。

之前我曾经使用过像Lucene.Net这样的东西 - 显然需要某种全文索引 - 具有挑战性的一点是拿出Lucene返回的文档列表并以有用的方式呈现它。

更新:我想稍微澄清一下我的意思 - 有数百种通用的全文搜索表单都执行非常相似的功能,例如:

  • 每个互联网论坛上的搜索按钮
  • 每个维基上的搜索按钮
  • Windows / Google桌面搜索
  • 谷歌

这些搜索中的每一个都从不同的来源获取信息,并使用不同的方式显示它们(html,Windows表格等...)但是每个搜索都在不同的复杂方法中解决相同的问题,并且在大多数情况下(使用桌面搜索可能的例外情况)输入数据格式相同:Html或文本。

我正在寻找有关如何按照可能对用户有用的方式对搜索结果进行排名的建议和常用策略。

或者我考虑过的一个策略是做一些事情,比如拿一些wiki软件,将我的整个数据集作为文本导出到该wiki,然后只使用wiki进行搜索 - 我所追求的那种搜索是针对所有意图和在功能上与99%已经存在的搜索功能完全相同,我只是想给它一个不同的输入数据源,并且输出格式略有不同(我已经知道该怎么做)。

当然,必须就如何进行这类搜索提出一些建议?

5 个答案:

答案 0 :(得分:2)

SQL Server(包括Express版本)都具有full free-text search工具。这可以在列中搜索文本,但也可以利用IFilter在嵌入文档中进行搜索。您可以使用T-SQL中的FREETEXTTABLE命令在内容中智能搜索并按排名顺序返回:

  

“返回零,一或更多的表   这些列包含的行   值的基于字符的数据类型   符合意义,但不符合   确切的措辞,在文本中   指定的freetext_string。   FREETEXTTABLE只能被引用   在SELECT的FROM子句中   语句就像常规表名一样。

     

使用FREETEXTTABLE指定查询   freetext-type全文查询   返回相关性排名值   (RANK)和全文密钥(KEY)   每一行。“

例如

SELECT FT_TBL.CategoryName 
    ,FT_TBL.Description
    ,KEY_TBL.RANK
FROM dbo.Categories AS FT_TBL 
    INNER JOIN FREETEXTTABLE(dbo.Categories, Description, 
        'sweetest candy bread and dry meat') AS KEY_TBL
        ON FT_TBL.CategoryID = KEY_TBL.[KEY];

如需了解更多信息,请阅读Understanding SQL Server Full-Text Indexing

答案 1 :(得分:2)

您可以使用来自apache Lucene.Net的优秀图书馆Linq to Lucene扩展程序可以简化您的工作

答案 2 :(得分:0)

您的主题是特定于数据库的问题。您需要指定要使用的数据库。您可以将搜索关键字提供给数据库引擎,而不是通过程序进行搜索。

答案 3 :(得分:0)

也可以查看CONTAINSTABLE,因为它支持通配符和加权等...

http://msdn.microsoft.com/en-us/library/ms189760.aspx

答案 4 :(得分:0)

如果您不想使用SQL根,那么还要考虑Microsoft Search Server 2008 Express - 它是免费的,功能强大且易于使用。它符合您的所有要求,并自动处理排名等事项。