传统数据库mysql在大数据量和高并发情况下,在模糊查询中文关键词时效率不高。
使用lucene构造搜索索引库用于响应查询。
1. 常用查询算法
1.1 顺序扫描法
逐行对比查找,慢但准确率高。
场景:mysql的like关键字模糊查询,文本编辑器的ctrl+f查询功能
1.2 倒排索引
将文档进行切分词后组成索引(目录),索引和原文档形成关联关系,查询时通过索引找文档。
切分词:去掉停用词,去掉空格标点符号,大写转小写,去掉重复词。切分词后构造的索引大小较小,易于查询。
优点:准确率高,查询速度快,随内容增加查询不会变慢。
缺点:占用了额外的存储空间。
1.3 全文检索应用场景
站内搜索:贴吧 论坛 电商等文本检索
垂直领域:专注某一块业务的查询,招聘医药网站等
专业搜索引擎公司:google baidu
2. Lucene索引/搜索流程
原始文档 -> 获取文档进行分词 -> 写入lucene索引库
查询请求 -> 对lucene索引库进行搜索 -> 返回结果
2.1 索引流程
原始数据获取后创建成文档(Document),每条文档包含唯一的ID。
文档中包含一个一个的Filed域,包含field name 和 value。
对每个域的value进行分词后,将每个词和文档编号进行索引目录对照构造。
2.2 搜索流程
获取搜索的内容,如果是一句话,会进行且分词,对每个词分别进行查询,结果通过(and/or)进行组合后返回。
网友评论