思考面试题:
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目录:
image.png
2)在IKAnalyzer.cfg.xml配置文件内容添加:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
  3. <properties>
  4. <comment>IK Analyzer 扩展配置</comment>
  5. <!--用户可以在这里配置自己的扩展字典 *** 添加扩展词典-->
  6. <entry key="ext_dict">ext.dic</entry>
  7. </properties>

3)新建一个 ext.dic,可以参考config目录下复制一个配置文件进行修改

传智播客
奥力给
docker restart es

# 查看 日志
docker logs -f elasticsearch

4)重启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")
));