Solr基本面试问题

2020-05-29 00:00:00 索引 数据 多个 服务器 是一个

solr是什么?有什么优点?

Solr是Lucene面向企业搜索应用的扩展

基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常的全文搜索引擎

Lucene是什么?

Lucene 是一个基于 Java 的全文信息检索工具包,目前主流的搜索系统Elasticsearch和solr都是基于lucene的索引和搜索能力进行。

Solr和Lucene的区别?

Lucene是一个基于Java的全文信息检索工具包,局限于Java调用,而Solr底层的核心技术是使用Lucene来实现的,是一个跨平台的搜索应用,而且提供了一个HTTP的管理页面。

Lucene 实现全文检索的流程?

  1. 创建索引的过程:确定要搜索的内容—>构建文档对象—>分析文档(分词)—>创建索引
  2. 搜索过程:用户通过搜索界面—>创建查询—>执行搜索,从索引库搜索—>渲染搜索结果


什么是全文检索?

数据总体分为两类:结构化数据和非结构化数据。

  • 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。
  • 非结构化数据:指不定长或无固定格式的数据。非结构化数据又一种叫法叫全文数据。

对结构化数据的搜索:如对数据库的搜索,用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的索引库中,并且要随着数据库中的变化而变化

相关文章