1、如何实现酒店拼音搜索?(如果简历写了该功能)
1)在Elasticsearch安装拼音分词器的插件
2)因为拼音分词器只是把词的每个字进行转换拼音,无法实现对一个词的拼音转换,不太满足项目的需求
3)这时我们结合ik中文分词器设计自定义分词器
4)我们的自定分词器,配置成先使用ik分词器对中文进行分词,然后再将这些词通过拼音分词器转换为拼音的词条
5)但是为了在搜索时,避免中文也会转换拼音,我们在搜索时还是使用ik分词器去分词,依赖search_analyzer来指定
“analyzer”: “my_analyzer”,
“search_analyzer”: “ik_max_word”
2、如何实现搜索关键词自动补全(如果简历写了该功能)
1)在酒店索引库添加一个completion字段,该字段内容类型是数组,在里面填充需要补充的数据
2)在用户搜索时,每次输入关键词时,使用suggest搜索进行suggestion搜索,把结果列表返回前端
GET /test/_search
{
“suggest”:{
“title_suggest”:{
“text”:”s”,
“completion”:{
“field”:”title”,
“skip_duplicates”:true,
“size”:10
}
}
}
3、请说说Elasticsearch与MySQL数据如何同步?
1)使用MQ
1.1 在生产者方法在新增、修改、删除数据的方法,发送数据ID给RabbitMQ
1.2 在消费方编写监听类,分别写了监听新增修改方,和监听删除方法的处理业务,根据数据ID查询数据,新增、修改,删除ES的数据
2)使用Canal
4、请问Elasticsearch的脑裂问题如何产生?如何解决?
什么是脑裂?
一个Elasticsearch集群环境中出现多个master节点情况,成为脑裂
如何产生?
master和slave节点间网络延迟或阻塞
master节点负载过重
Elasticsearch的JVM内存不足
导致master节点临时丢失,导致slave重新选举master节点<br />
如何解决:
1)修改Elasticsearch节点通信超时时间,默认3秒,改大一些
2)master节点的职责分离,master不作为数据存储节点,设置参数为:nodes.data=false
3)扩展Elasticsearch的JVM内存,默认1G,改大一些,物理机器内存一半左右,如果是使用docker容器进行ES镜像的部署,那么可以在run的时候添加上ES_JAVA_OPTS=-Xms参数即可;
4)Elasticsearch的选举票数,改为备选节点数/2 + 1 ;在 ES7默认改好了,ES6或ES5修改一下这个值
