Elasticsearch(Java面试题)

一、什么是Elasticsearch?

Elasticsearch简称ES,是一种以JSON格式进行数据存储的分布式搜索引擎

二、为什么不使用MySQL查询,而要用ES呢?

在一个电商平台项目中,会有非常多的商品,如果使用以往的MySQL进行模糊查询,需要比较长的等待时间,对数据库压力比较大ES中使用倒排索引,查询效率非常高,可以减轻MySQL压力,而且还能进行分词查询高亮处理,MySQL是做不到的。

三、什么时候使用ES?什么时候使用MySQL呢?

不是所有的数据都会存在ES中,像商品规格表这种不常修改,且不会去模糊查询的放到缓存中就好了。如果要同步多张表到ES中,就要在Logstath中配置多个mysql的配置文件,对应到mysql的每张表

四、什么是倒排索引?什么是分词查询?

倒排索引:将文档中的关键字文档ID进行记录,在搜索关键词的时候,直接到指定的文档ID中查找数据
分词查询:比如去搜索腾讯课堂,ES有自带的分词器会将腾讯课堂分词为腾讯课堂,然后通过倒排索引去查找指定的文档id。
Elasticsearch(Java面试题)

五、分词器有哪些?

ES中有一个常用的英文分词器analyze,它只能够识别英文,对英文进行分词,对中文是每个字符都是独立的。如果要对中文进行分词识别,可以安装ik中文分词器插件。

六、ES中有哪些常用数据类型?

(1)六个数字类型:byte、short、integer、long、float、double
(2)布尔型:boolean
(3)字符型:string(text分词,keyword不分词)
(4)二进制型:binary

七、ES集群方式

ES集群原理类似Redis分片集群原理,采用分片集群+主从复制+请求转发的方式集群
Elasticsearch(Java面试题)

八、ES的选举过程是怎么样的?

类似ZK?待定

九、ES如何与MySQL实现数据同步?

当第一次启动节点的时候,logstathMySQL中的数据JSON格式插入到ES中,并修改MySQL中的updatetime字段为系统时间,之后每隔一分钟去MySQL中查updatetime大于上次同步时间的数据增量同步到ES中。
Elasticsearch(Java面试题)

十、ELK是什么?如何实现日志收集?

ELS是Elasticsearch+Logstath+Kibana,Logstath用来收集日志,并且把日志以Json格式输出到ES中,通过kibana操作数据
Elasticsearch(Java面试题)

十一、ES和MySQL专业名词比较

ES MySQL
索引 数据库
类型
文档 数据

十二、常用的ES语句有哪些?

增:POST /mymayikt/user/1,不指定ID会随机分配一个ID
删:DELETE /mymayikt/user/1
改:PUT /mymayikt/user/1
查:GET /mymayikt/user/1
查询数据:_search
查询设置:_setting
查询映射:_mapping
条件查询:GET /mymayikt/user/_search?q=age:21
范围查询:GET /mymayikt/user/_search?q=age[30 TO 60]
降序排列:GET /mymayikt/user/_search?q=age[30 TO 60]&sort=age:desc
分页查询:GET /mymayikt/user/_search?q=age[30 TO 60]&sort=age:desc&from=0&size=2
精确查询:
GET mymayikt/user/_search
{
“query”: {
“term”: {
“name”: “xiaoming”
}
}
}
分词查询:
GET /mymayikt/user/_search
{
“from”: 0,
“size”: 2,
“query”: {
“match”: {
“car”: “奥迪a61”
}
}
}
分词器查询:
http://192.168.212.181:9200/_analyze
{
“analyzer”: “ik_smart”,
“text”: “奥迪”
}