思考面试题:
1、es介绍及作用?
是一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能。
2、es和lucene的关系?
lucene是Apache的开源搜索引擎类库。提供了搜索引擎的核心API。而es就是基于它实现的
3、什么是文档和词条?
文档就是表中的每一行数据
词条就是对文档中的内容进行分词,得到的词语就是词条
4、什么是正向索引?
基于id创建的索引,若搜索非索引字段,会逐行去搜索
5、倒排索引介绍?
对文档内容分词,对词条创建索引,并记录词条所在文档的信息,查询时先根据词条查询文档id,而后获取文档
6、索引的含义?
相同类型的文档的集合
7、分词器的作用?
创建倒排索引时对文档分词
用户搜索时,对输入内容分词
8、中文分词器介绍?
IK分词器按照中文释义进行分词
9、IK分词器有几种模式?
ik_smart::只能切分,粗粒度(分的比较粗)
ik_max_word:最细切分,分的比较细
10、如何扩展新词 如何忽略停顿词?
1)打开IK分词器config目录:
2)在IKAnalyzer.cfg.xml配置文件内容添加:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"><properties><comment>IK Analyzer 扩展配置</comment><!--用户可以在这里配置自己的扩展字典 *** 添加扩展词典--><entry key="ext_dict">ext.dic</entry></properties>
3)新建一个 ext.dic,可以参考config目录下复制一个配置文件进行修改
传智播客
奥力给
docker restart es
# 查看 日志
docker logs -f elasticsearch
索引库的CRUD
mysql和es 对比?
在mysql中搜索非索引数据时,会进行全表搜索,数据量过多时,效率会变慢,而es搜索是通过倒排索引搜索,将文档中的数据利用算法分词,创建表,将得到一个个的词条,将词条和词条所在文档id、位置等信息保存,当用户输入关键词进行搜索时,es会对用户输入的词进行分词,得到每个词条,拿着词条在倒排索引中查找,得到所在文档id和位置,拿着文档id到正向索引库中查找具体文档
java中如何操作es?
1、首先引入es的RestHighLevelClient依赖:
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
2、因为SpringBoot默认的ES版本是7.6.2,所以我们需要覆盖默认的ES版本:
<properties>
<java.version>1.8</java.version>
<elasticsearch.version>7.12.1</elasticsearch.version>
</properties>
3、初始化RestHighLevelClient:
初始化的代码如下:
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(
HttpHost.create("http://192.168.150.101:9200")
));
