全搜索文本查询

时间:2009-08-14 11:48:20

标签: c# asp.net sql-server-2005 full-text-search

我想在我的webapp中添加简单的全搜索文本,可以接受多个单词进行搜索 示例搜索条目:“在线SQL书籍”

我应该将其转换为:

WHERE (CONTAINS(myColumn,  '"Online*" and "sql*" and "books*"' ))  
or : WHERE (CONTAINS(myColumn,  '"Online* sql* books*"' ))  
or maybe: WHERE (CONTAINS(myColumn,  '"Online*"' ))  and (CONTAINS(myColumn,  '"SQL*"' ))  and (CONTAINS(myColumn,  '"books*"' ))    

或者最好使用'FORMSOF(INFLECTIONAL('...

另一个问题是,在我的业务对象内部的存储过程中构建查询,然后将其传递给存储过程会更好吗?

2 个答案:

答案 0 :(得分:1)

使用SQL进行全文搜索的问题在于它可能非常慢并且错过了您希望它成功的搜索。 SQL搜索也不对数据提供任何形式的排名,因此包含这些术语的任何文本都可能最终接近顶部。

为了解决这两个问题,Lucene.net被创建为允许简单地创建一个适当的单词到条目索引。在这样做时,它还可以查看在特定条目中使用单词的频率并提供排名信息。您会发现它在执行任务时显着优于使用SQL,无论是在单次搜索中查找结果还是执行速度,尤其是在扩展以支持更多搜索时。

答案 1 :(得分:0)

第一种形式很好(CONTAINS(myColumn,'“Online *”和“sql *”和“books *”')) - 无论如何sql花时间来解析查询。

第二个问题是方便的问题。如果你在sql2005中使用字符串操作,那就去做吧。但请记住sql-injection问题,请检查两次。