Solr基本面试问题
solr是什么?有什么优点?
Solr是Lucene面向企业搜索应用的扩展
基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常的全文搜索引擎
Lucene是什么?
Lucene 是一个基于 Java 的全文信息检索工具包,目前主流的搜索系统Elasticsearch和solr都是基于lucene的索引和搜索能力进行。
Solr和Lucene的区别?
Lucene是一个基于Java的全文信息检索工具包,局限于Java调用,而Solr底层的核心技术是使用Lucene来实现的,是一个跨平台的搜索应用,而且提供了一个HTTP的管理页面。
Lucene 实现全文检索的流程?
- 创建索引的过程:确定要搜索的内容—>构建文档对象—>分析文档(分词)—>创建索引
- 搜索过程:用户通过搜索界面—>创建查询—>执行搜索,从索引库搜索—>渲染搜索结果
什么是全文检索?
数据总体分为两类:结构化数据和非结构化数据。
- 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。
- 非结构化数据:指不定长或无固定格式的数据。非结构化数据又一种叫法叫全文数据。
对结构化数据的搜索:如对数据库的搜索,用SQL语句。再如对元数据的搜索,如利用windows搜索对文件名,类型,修改时间进行搜索等。
对非结构化数据的搜索:如利用windows的搜索也可以搜索文件内容,Linux下的grep命令,再如用Google和百度可以搜索大量内容数据。
*全文检索:即先建立索引,再对索引进行搜索。索引是从非结构化数据中提取出之后重新组织的信息。
倒排索引和常规索引?
常规索引:
文档——>关键词 但是这样检索关键词的时候很费力,要一个文档一个文档的遍历一遍。
倒排索引:倒排索引是关键词到文档的映射
关键词——>文档 这样,只要有关键词,立马就能找到她在那个文档里出现过,然后就可以查出整个文档。
中文分析器 IK Analyzer
IK Analyzer 是一个开源的,基亍 java 语言开发的轻量级的中文分词工具包。可以自己添加扩展词典和停用词典。
配置域
域相当于数据库的字段
域的常用属性:
- name:指定域的名称
- type:指定域的类型
- indexed:是否索引
- stored:是否存储
- required:是否必须
- multiValued:是否多值
我们根据自己的需求自定义域,例如:id,标题,价格,品牌,商家名称,分类名称,商品的SKU的ID,图片地址等。
复制域
复制域的作用在于将某一个 Field 中的数据复制到另一个域中,就是说可以将域进行组合
我们把标题、品牌、分类名称、商品放进复制域中,用来后续的组合查询
注意:复制域不需要存储,只是逻辑上进行组合,属性就选择Ik分词器,需要建立索引搜索
动态域
将两个域的域名复制到一个text文本域中。
我们数据库中的规格字段,存储的是动态的值,不固定的,需要动态拼接,在末尾+*号表示。
Spring Data Solr简介
Spring Data Solr 就是为了方便 Solr 的开发所研制的一个框架,其底层是对 SolrJ(官方 API)的封装。
我们为什么要使用Solr来进行查询:
- 数据库中不能分词
- 在数据库中我们只能使用Like来模糊搜索,太低效,太慢
- 在电商项目中,使用搜索会承担很大的压力,每一个人过来搜一下,数据库扛不住压力
所以我们需要使用更专业的工具来实现搜索功能,我们要把数据库中的内容导入到Solr的索引库中,并且要随着数据库中的变化而变化
相关文章