ES面试题

1、如何同步索引库

同步调用
在完成数据库操作后,直接调用搜索服务提供的接口
异步通知
在完成数据库操作后,发送MQ消息
搜索服务监听MQ,接收到消息后完成数据修改
监听binlog

2、分词器

ik分词器
ik_smart
ik_max_word
自定义分词器
以拼音分词器为例
默认的拼音分词器会将每个汉字单独分为拼音,而我们希望的是每个词条形成一组拼音,需要对拼音分词器做个性化定制,形成自定义分词器。

elasticsearch中分词器(analyzer)的组成包含三部分:

character filters:在tokenizer之前对文本进行处理。例如删除字符、替换字符
tokenizer:将文本按照一定的规则切割成词条(term)。例如keyword,就是不分词;还有ik_smart
tokenizer filter:将tokenizer输出的词条做进一步处理。例如大小写转换、同义词处理、拼音处理等
文档分词时会依次由这三部分来处理文档:
在这里插入图片描述

PUT /test
{
  "settings": {
    "analysis": {
      "analyzer": { // 自定义分词器
        "my_analyzer": {  // 分词器名称
          "tokenizer": "ik_max_word",
          "filter": "py" //和下面的过滤器名称相同
        }
      },
      "filter": { // 自定义tokenizer filter
        "py": { // 过滤器名称
          "type": "pinyin", // 过滤器类型,这里是pinyin
		  "keep_full_pinyin": false,
          "keep_joined_full_pinyin": true,
          "keep_original": true,
          "limit_first_letter_length": 16,
          "remove_duplicated_term": true,
          "none_chinese_pinyin_tokenize": false
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "name": {
        "type": "text",
        "analyzer": "my_analyzer",	// 自定义的分词器
        "search_analyzer": "ik_smart"
      }
    }
  }
}

3、高亮设置

高亮一定要用全文检索查询
pre_tags:设置高亮字段的前置标签
post_tags:设置高亮字段的后置标签
注意:
1、默认情况下,高亮的字段,必须与搜索指定的字段一致,否则无法高亮,如果要对非搜索字段高亮,则需要添加一个属性:required_field_match=false
2、加高亮标签的地方,不是搜索的关键词,而是通过分词器对搜索的关键词进行分词得到的词条进行高亮
3、高亮是对关键字高亮,因此搜索条件必须带有关键字,而不能是范围这样的查询

4、倒排索引

倒排索引中有两个非常重要的概念:

  • 文档(Document):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息

  • 词条(Term):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。例如:我是中国人,就可以分为:我、是、中国人、中国、国人这样的几个词条
    创建倒排索引是对正向索引的一种特殊处理,流程如下:

  • 将每一个文档的数据利用算法分词,得到一个个词条

  • 创建表,每行数据包括词条、词条所在文档id、位置等信息

  • 因为词条唯一性,可以给词条创建索引,例如hash表结构索引

正向和倒排
那么为什么一个叫做正向索引,一个叫做倒排索引呢?

正向索引是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程。
而倒排索引则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程。
是不是恰好反过来了?

那么两者方式的优缺点是什么呢?

正向索引:
优点:
可以给多个字段创建索引
根据索引字段搜索、排序速度非常快
缺点:
根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。

倒排索引:
优点:
根据词条搜索、模糊搜索时,速度非常快
缺点:
只能给词条创建索引,而不是字段
无法根据字段做排序

5、并发下如何保持读写一致

1、可以通过版本号使用乐观锁并发控制,以确保新版本不会被旧版本覆盖,由应用层来处理具体的冲突

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/495642.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机病房呼叫系统数码管显示房号设计

**单片机设计介绍,基于单片机病房呼叫系统数码管显示房号设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机病房呼叫系统数码管显示房号设计概要主要涵盖了利用单片机技术实现病房呼叫系统,并…

一文即可帮助你认识进程和线程~

本文的重点:什么是:进程、进程调度、线程和他们之间的联系。主讲概念知识,不讲代码实现 目录 一、认识进程 1.什么是进程 2.进程的信息 3.进程调度(***) 4.进程调度的基本过程 二、线程 1.线程的引入 2.什么是线程 3.进程于线程的联…

Oracle监听报错TNS-01189

测试环境无法连接数据库,怀疑监听没有启动查看监听状态 lsnrctl status查看监听状态发现监听确实没有启动,start监听却出现TNS-01106: Listener using listener name LISTENER has already been started ps -ef | grep -i tns通过ps查看,发现…

品牌百科词条创建包括哪些模版?品牌百科词条文案如何写!

品牌百科词条是一个旨在为用户提供品牌相关信息的平台,今天腾轩科技传媒来讨论一下如何创建一个优质的品牌百科词条。首先,要点之一是确保信息的准确性。在创建品牌百科词条时,我们必须确保所有信息都是准确的,这包括品牌的历史、…

快速申请通配符证书

通配符证书又名泛域名证书,是一种SSL/TLS证书,用于保护多个域名。是由域名字段中的通配符*表示。通配符证书最大的亮点在于可以通过绑定一个主域名,从而间接绑定无数的次级子域名。等同于通配符证书可以绑定无数的域名,在一些特殊…

【C++】搜索二叉树

1. 二叉搜索树 a. 二叉搜索树的概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根…

解决方案:如何安装neo4j软件

文章目录 一、安装JDK二、安装neo4j 一、安装JDK 第一步先安装JDK,因为neo4j环境需要JDK,过程比较多,截图如下: 安装JDK网址 https://www.oracle.com/java/technologies/downloads winR,输入cmd,再输入j…

【Faster Bing】Bing 搜索结果取消跳转至 bing.com/ck

更快的 Bing (Faster Bing) 1. 介绍 项目地址: GitHub: https://github.com/jiang-taibai/faster-bingGitee: https://gitee.com/jiang-taibai/faster-bingGreasyFork: https://greasyfork.org/en/scripts/490999-faster-bing 在使用 Bing 搜索时,Bin…

如何遍历整个DOM树

原文链接:[如何遍历整个DOM树(外网原文链接)](https://chrisdeo.github.io/2019/07/20/%E5%A6%82%E4%BD%95%E9%81%8D%E5%8E%86%E6%95%B4%E4%B8%AADOM%E6%A0%91/) 作为前端开发工程师,我们大部分工作内容其实还是围绕着DOM在进行Javascript的编写&#xf…

AMD本月发布的成本优化型Spartan UltraScale+ FPGA系列

随着 FPGA 在更多应用中的使用,AMD 推出了最新的成本、功耗与性能平衡的系列产品。为了扩展其可编程逻辑产品组合,AMD最近推出了最新的成本优化型 Spartan FPGA 系列。随着 FPGA 应用于越来越多的产品和设备,设计人员可能经常发现自己正在寻找…

前端实现浏览器自定义滚动条

前言: 最近有个项目,产品觉得浏览器默认滚动条太丑了。想美化一下,比如自定义颜色,加上圆角,宽高都要更改一下。我查了资料和文档总结了一下 写法,特此记录以便之后使用。 浏览器滚动条api 总结&#xff…

git基础-tagging

tagging 与大多数版本控制系统一样,Git具有将存储库历史中的特定点标记为重要tag的能力。通常,人们使用此功能来标记发布点(例如v1.0,v2.0等)。在本节中,将学习如何列出现有的标签,如何创建和删…

智慧公厕的技术融合策略

智慧公厕是迎合现代城市发展需要的一项重要基础设施,其设计的技术融合策略在实现公共厕所泛在感知、互通互联、协同构筑智慧城市等方面起到了关键作用。本文将以智慧公厕源头实力厂家广州中期科技有限公司,大量精品案例现场实景实图实例,从物…

【MybatisPlus-updateById】| 更新字段失效 | 很难受的一个BUG

目录 一. 🦁 写在前面二. 🦁 探索过程三. 🦁 原理解释四. 🦁 最后 一. 🦁 写在前面 如题所言,很难受!!! 原因是 🦁 在写项目的时候,使用 Mybatis…

Docker大全

Docker大全 Docker安装准备工作开启虚拟机系统卸载Docker在线安装Docker离线安装Docker Docker服务基本操作启动docker服务查看docker状态设置docker开机自启禁用docker开机自启重新启动docker服务查看docker信息查看docker info中具体key的信息停止docker服务docker镜像加速 D…

高效沟通:总裁口才提升之道

高效沟通:总裁口才提升之道 在当今这个信息爆炸的时代,沟通已经成为了企业与个人之间不可或缺的一部分。而对于企业的总裁来说,良好的口才更是其领导力的体现和成功的保障。因此,如何提升总裁的口才,实现高效沟通&…

2024运维堡垒机品牌排名看这里!

2024运维堡垒机品牌排名看这里! 1、行云管家 2、天磊卫士 3、阿里云 4、华为云 5、安恒 6、JumpServer 7、山石网科 8、齐治 9、启明星辰 10、奇安信 11、迪普科技 12、腾讯云 13、中远麒麟 备注:以上排名不分先后 运维堡垒机定义 运维堡…

Chrome 插件打包发布

插件打包发布 一、打包成 zip 包 最简单方便的一种其实就是打包成 zip 包,通过下载链接进行下载,在包里面通过设置版本号和数据库的版本号对比来提醒用户进行新包的下载。 二、发布到 Chrome 应用商店 1. 注册成为开发者 在发布到 chrome 应用商店之…

Linux系统使用Docker部署MongoDB数据库并实现无公网IP远程访问

文章目录 前言1. 安装Docker2. 使用Docker拉取MongoDB镜像3. 创建并启动MongoDB容器4. 本地连接测试5. 公网远程访问本地MongoDB容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主要介绍如何在Linux Ubuntu系统使用Docker快速部署Mon…

【Java程序设计】【C00387】基于(JavaWeb)Springboot的校园食堂订餐系统(有论文)

基于(JavaWeb)Springboot的校园食堂订餐系统(有论文) 项目简介项目获取开发环境项目技术运行截图 博主介绍:java高级开发,从事互联网行业六年,已经做了六年的毕业设计程序开发,开发过…