我有一批中医古籍资料,存在两张表中。一张表主要存标题,一张存标题对应的内容(内容很大,最大可达3M每条)。
数据量较大,存在SQL中大概有1G左右大小,记录条数23万条左右。
主要有标题和内容两列需要搜索,两个字段类型都是NVARCHAR(MAX),内容列的最大长度有3M。我想通过输入用空格分开的多关键字检索数据,现在用LIKE匹配或用CHARINDEX都很慢。经常超时,查询时间超过30s。
要查的关键字没有常用的,因为是想根据多个症状关键字搜,标题和内容里都是古文,所以根据常用关键字建立索引的做法不可取。
想知道有没有对这样的需求的解决方案?全文搜索
最终使用了SQL2005自带的全文索引,速度还可以。
这个用Lucene.Net来建立索引,用盘古分词和高亮搜索关键字,园里有好多这样的文章,使用也不麻烦
据我之前的了解,使用Lucene搜索,是有一定的命中机率的。 他也是会预生成一些个关键字等你来搜,如果他的分词算法生成的关键字里没有我搜索的关键字,有可能部分文章是搜不到的。是这样吗?这个搜索是100%可靠性吗?
就用Lucene.Net吧,它内置的是一元分词,所以大家都会搭配 盘古分词 来使用,不会预生成关键字,都说了是全文检索嘛!!至于可靠性,你的文章中的词语教新的话,你可以下载搜狗的医学方面的词库,然后用工具转换格式,导入到“判断分词”下面的词库文件里面去。。。。。。。
我看到SQL2005也有了全文检索功能,比Lucenne.Net有什么优缺点吗? Lucene.Net好像官方停止升级了
@沧海一杰: sql自带的全文检索,用起来,比较简单,一两天就能搞定
@流光布落格: 又发了两贴,用起来还是有问题啊,EF不支持,无法参数化。
@沧海一杰: 我没有尝试过,就一个搜索功能,变通下,搜索直接用ADO.NET嘛,自己写SQL语句,select * from table where contains.......