目前项目中的日志查询 功能 由于长年累月的写入,目前已经达到千万级,对日志进行like 查询,速度可想而知。
此处只讨论 在数据库的优化。
当时 想到两个方案,一个是分区,一个 是全文检索。
分区的话,如果跨区,速度也会很慢,并且对区粒度的划分也得考虑,并且既然使用 like ‘%XX%’,必然不会走索引。
2. 创建全文目录,如图,右键 创建即可,
3. 在对应的表或者视图上 定义全文索引:注意 表或者视图 必须存在唯一索引,且视图不能包含union,且每个表或者视图,只能有一个全文索引,步骤:选中 表或者视图 --右键--定义全文索引--下一步,直到 选择索引 界面,如果存在全文索引,则系统默认选中,否则,会提示 无有效索引。
5. 第4步ok后,下面就是 设置 索引填充规则了,上面都有说明,自己 实际 操作 看一下就行了,然后 下一步,直到 定义填充计划 这个页面,这个干什么的呢。 就是 说 我可以 定义一个job定时进行填充以及填充方式(不能每次都完全填充吧,可以是 增量填充或者基于更改的填充,),next.大功告成。
以上方法, 需要开启全文索引, 但是sql已经不建议使用全文索引了, 之后百度到其他方法
如果用solr的话 搜索词是“今天是天气很好的周六” 是不是也要用盘古分词 先分词 再扔到solr找内容??
@秋壶冰月: 你说的.net版本是不是 处理和建立索引的服务是.net版本,比如是移植Java的Lucene,solr是在Lucene之后的,不知道没有.net的版本, 有没提供相关度高低的排序的,?有的话哪里有讲解的吗?
@koi: 可以在创建索引的时候,设置权重
@秋壶冰月: 如果我还有分类搜索的话,还适合用luncence吗? 加上分类的搜索,分类的那个字段不用索引吧,?因为我要全部匹配的
@koi: 如果你创建的索引有分类信息,就不用重新创建索引了,可以通过判断进行要不要进行分词
@秋壶冰月: 可以创建索引但是不分词吗?比如一条信息内容是 “今天天气还是不错的” 属于 “天气”分类,把这两个当为一条记录存进两个字段,现在我对信息内容索引也要分词,然后对天气分类进行索引,但是不分词可以吗?还是说分类那个不用索引也是可以的,查找速度不慢
@秋壶冰月: 我搜索的词“今天天气很好” 用盘古分词后,搜索内容想只要符合 分词的其中一项 (or) 就可以了怎么用的啊? 像下面这样好像是and操作 全部满足分出来的词才搜的出结果
@koi: 不是呀!只要符合一个就能查询出来呀!
@秋壶冰月: 上面的代码默认是and操作的,我想用or。。 那假如说上面是or ,我想用and 全部满足时采用的话 怎么改的?
@秋壶冰月: 我的三个句子有 1:“关于SQLSERVER的全文目录跟全文索引的区别”
2:“全文索引--海量数据模糊查询” 3:“sqlserver-全文索引多表查询效率问题”
根据 词 “全文索引sqlserver”去搜索 只能搜出1:3