全文搜索引擎技术详解之 Apache Solr 的使用
Solr
Solr 是一个可扩展的,可部署,搜索,存储引擎,优化搜索大量以文本为中心的数据库
Solr 是开源搜索平台,用于构建搜索应用程序
建立在 Lucene(全文搜索引擎)之上
Solr 是企业级的,快速的和高度可扩展的,使用 Solr 构建的应用程序可以提供高性能,但是非常复杂
Solr 可以和 Hadoop 一起使用:由于 Hadoop 处理大量数据,Solr 可以从大的数据源中找到所需信息.
Solr 不仅限于搜索,也可以用于存储.和其它 NoSQL 数据库一样,是一种非关系数据存储和处理技术
Apache Solr 特点
Solr 是 Lucene 的 Java API 包装,使用 Solr,就可以使用 Lucene 的所有功能
RESTful API: 要与 Solr 通信,可以使用 RESTful 服务与 Solr 通信,可以使用 XML,JSON,CSV 等格式的文件作为输入文档,并以相同的文件格式获取结果
全文搜索: Solr 提供了全文搜索所需的所有功能:令牌,短语,拼写检查,通配符,自动完成
企业准备: 根据企业或组织的需要,Solr 可以部署在任何类型的系统:独立,分布式,云
灵活可扩展: 通过扩展 Java 类并进行相关配置,可以定制 Solr 组件
NoSQL 数据库: Solr 可以用作大数量级的 NoSQL 数据库,可以沿着集群分布搜索任务
搜索引擎
搜索引擎:
搜索引擎是庞大的互联网资源数据库,如网页,新闻组,程序,图像等
有助于在网上定位信息
用户可以通过以关键字或短语的形式将查询传递到搜索引擎中来搜索信息,然后搜索引擎搜索其数据库并向用户返回相关链接
搜索引擎组件
搜索引擎有三个组件:
Web 爬虫: 一个收集网络信息的软件组件
数据库: Web 上的所有信息都存储在数据库中,包含大量的 Web 资源
搜索接口: 这个组件是用户和数据库之间的接口,帮助用户搜索数据库
搜索引擎工作流程
获取原始内容: 任何搜索应用程序的第一步是收集要进行搜索的目标内容
构建文档: 从原始内容构建文档,让搜索应用程序可以很容易的理解和解释
分析文档: 在索引开始之前,将对文档进行分析
索引文档: 当文档被构建和分析后,下一步是对文档建立索引,以便可以基于特定键而不是文档的全部内容来检索该文档.索引类似于在书开始页或末尾处的目录索引,其中常见单词以页码显示,使得这些单词可以快速追踪,而不是搜索整本书
用于搜索的用户接口: 当索引数据库就绪,应用程序就可以执行搜索操作.为了帮助用户进行搜索,应用必须提供用户接口,用户可以在用户接口中输入文本并启动搜索过程
构建查询: 当用户做出搜索文本的请求,应用程序应该使用该文本准备查询对象,然后可以使该查询对象来查询索引数据库以获得相关细节
搜索查询: 使用查询对象,检查索引数据库以获取相关详细信息和内容文档
渲染结果: 当收到所需结果,应用程序应决定如何使用用户界面向用户显示搜索结果
分词技术
分词技术: 搜索引擎针对用户提交查询的关键词串进行的查询处理后,根据用户的关键词串用各种匹配方法进行分词的一种技术
中文分词算法
基于字符串匹配
基于字符串匹配:
即扫描字符串,如果发现字符串的子串和词相同,就算匹配
这类分词通常会加入一些启发式规则:正向/反向最大匹配,长词优先等
基于字符串匹配算法优点:
速度快
都是 O(n)时间复杂度
实现简单
效果尚可
基于字符串匹配算法缺点:
对歧义和未登录词处理不好
ikanalyzer,paoding 等就是基于字符串匹配的分词
基于统计及机器学习的分词方式
基于统计及机器学习的分词方式:
基于人工标注的词性和统计特征,对中文进行建模. 即根据观测到的数据(标注好的语料)对模型参数进行估计.即 训练
在分词阶段再通过模型计算各种分词出现的概率,将概率最大的分词结果作为最终结果
常见的序列标注模型:HMM,CRF
基于统计及机器学习的分词方式优点:
可以很好地处理歧义和未登录问题
效果比基于字符串匹配算法更好
基于统计及机器学习的分词方式缺点:
需要大量的人工标注数据
较慢的分词速度
IKAnalyzer
IKAnalyzer 是一个开源的,基于 Java 语言开发的轻量级中文分词工具包
基于文本匹配,不需要投入大量的人力进行训练和标注
可以自定词典,方便加入特定领域的词语,能分出多粒度的结果
部署 Solr 并安装 IKAnalyzer
创建/usr/local/docker/solr/ikanalyzer 目录
docker-compose.yml
Dockerfile(在/usr/local/docker/solr/ikanalyzer 中需要有文件:ik-analyzer-solr5-5.x.jar,solr-analyzer-ik-5.1.0.jar,ext.dic,stopword.dic,IKAnalyzer.cfg.xml,managed-schema)
构建镜像: 在/usr/local/docker/solr 中执行命令
Solr 分析功能
修改 managed-schema 配置业务系统字段
Solr 中自带的相同字段无需再添加,其它字段需要手动添加 Solr 字段(通过编辑 managed-schema 配置文件来手动添加 Solr 字段)
复制配置到容器
重启容器
在 Solr 的 Web 界面可以进行 CRUD 操作
SpringBoot 整合 Solr
创建搜索服务接口
创建 myshop-service-search-api 项目,该项目只负责定义定义接口
pom.xml
在项目中创建 SearchService 接口
创建 TbItemResult 用于返回 Solr 结果集
创建搜索服务提供者
创建 myshop-service-search-provider 服务提供者项目
MyShopServiceSearchProviderApplication
在项目中创建 TbItemResultMapper 接口用于查询 MySQL 中的数据,用于插入到 Solr 数据库中
在 resource 中创建 mapper 包用于创建 TbContentCategoryMapper.xml
创建 SearchServiceImpl 实现 SearchService 接口
创建搜索服务消费者
创建搜索服务消费者 myshop-service-search-consumer 对 Solr 数据库中的数据进行检索
MyShopServiceSearchConsumerApplication
SearchController
版权声明: 本文为 InfoQ 作者【攻城狮Chova】的原创文章。
原文链接:【http://xie.infoq.cn/article/020cd16151f0cd454916f5ef8】。文章转载请联系作者。
评论 (2 条评论)