1.ES批量操作对应的语法单词是啥?有什么优势?思考:哪些场景下使用?

bulk操作; ElasticSearch高级 - 图1 减少网络传输的次数,提升处理效率; 比如:这里有十个文档需要索引到ES索引库,批量操作会更好一些;当你在处理类似于log等海量数据的时候,你就可以一下处理成百上千的请求,这个操作将会极大提高效率。 批量索引文档:https://blog.csdn.net/neweastsun/article/details/91506909https://www.jianshu.com/p/2ea010271590

2.bulkRequest.add(***Request)的作用是什么?

组合多种操作请求(组合批量操作的API);

3.业务中什么时候需要将MySQL数据导入到ES中?如何导入(流程)?

搜索功能后上线,需要利用ES解决MySQL无法完成的搜索功能,ES上线后,数据库里面已经存在的那些需要被搜索的数据需要使用一次性脚本导入ES(全量同步);后续新发布的数据(需要被搜索的数据),需要使用增量的方式进行实时同步到ES; ES创建索引库 -> 构建索引库映射 -> 查询MySQL里面的(需要被搜索)数据集 -> 使用bulk操作批量导入ES(索引文档); image.png 全量同步:查寻数据库满足条件的数据,一次性导入(数据过多考虑分批);

4.对于数据库查询出来的Goods数据,其中将specStr转map赋值spec后再索引到ES中的目的是什么?(思考题)

ElasticSearch高级 - 图3 结合电商搜索业务,可以按照商品规格属性进行搜索,每个规格项是单独分开的,使用map结构更容易实现按单个规格进行搜索。 比如现在ES 对应的商品索引库中,有一个字段 spec 为 Object(ElasticSearch高级 - 图4Map)类型,那么map中就会有对应的各个规格项名称的属性,那么搜索时,如下: 搜索的时候,搜索条件: QueryBuilders.termQuery("spec.屏幕尺寸.keywords", "5.5~5.99英寸");

5.向ES中导入文档时,如果文档中的字段类型跟索引库映射的字段类型不匹配,会出现什么问题?

可能(是否能自动转换)会出现导入失败的问题,建议文档中字段类型跟索引库映射指定的字段类型要一致。


ES解决搜索需求,查询最重要。

6.match_all是查询全部数据的意思,默认情况下,执行match_all会将索引库所有文档全查询出来么?为什么?如何控制?

不会查询出所有记录; ES查询会存在默认分页查询的设定,默认分页查询10条; 可以用from, size指定分页查询参数;


7.term查询有什么特性?什么时候用?

不会对查询条件进行分词匹配,会拿着用户输入的内容全匹配字段分词结果内容;(使用较多) 如:输入:华为5G手机,termQuery匹配查询A字段,需要A字段中,必须存在华为5G手机这样的分词结果,才能算命中,如果存在华为5G手机这个字符串,但是不存在分词结果匹配,那么也不算命中。 如电商业务,根据品牌名称、分类查询: ElasticSearch高级 - 图5 多用于对于keyword类型字段(不会对字段内容进行分词存储)做全匹配查询,比如按照品牌名称查询商品,或者按照用户姓名精确全匹配查询用户信息,或者根据用户手机号码查询用户信息;

8.matchQurey有什么特性?什么时候用?operator取or跟and的区别是啥?

会对查询条件进行分词匹配,默认会取分词匹配后的并集,只要有一个词能够跟匹配上即可。(使用较多) 比如:电商业务 用户输入搜索内容:我想买一个手机,使用matchQurey去匹配商品标题字段,会有如下结果: ElasticSearch高级 - 图6 ElasticSearch高级 - 图7 有关并集、交集说明: ElasticSearch高级 - 图8 or:只要分词后有一个能匹配即可,and要求所有词都得存在。

9.分词后的模糊查询特性是什么?哪些情况下会用?

可以使用通配符wildcard、前缀prefix、正则regexp 模糊匹配分词结果;(效率较低,使用不多),在分词的基础上使用模糊查询匹配分词。 比如:在使用完 IK分词器后,某些词:假如 黑马程序员 被分为一个完整的词,不会再存在 黑、黑马…这样的词,那么用户在输入黑、黑马搜索后就不会查询出 黑马程序员 对应的文档,如果希望用户 输入黑、黑马 也能匹配 黑马程序员 这个词,就可以使用 模糊匹配分词 查询。


10.范围查询叫啥?举例说明使用场景在哪?ES搜索结果可以排序吗?

rangeQuery; 如:商品价格区间搜索。多用于:数值类型范围搜索;年龄、订单金额… ES支持按字段排序;

11.用户输入”华为手机”进行搜索,现在要求 商品标题商品描述 两个字段中,只要其中之一出现 华为或手机 词,即满足搜索条件,使用ES哪种搜索方式?

使用QueryString可以同时分词匹配多个字段;

12.布尔查询是用来干吗的?

组合多种查询方式。 ElasticSearch高级 - 图9

13.聚合查询如何理解?举例说明使用场景。

聚合查询,分为 桶聚合(分组聚合)、指标聚合(聚合函数); ElasticSearch高级 - 图10 ElasticSearch高级 - 图11 如上图,在搜索条件加持之下,满足条件的搜索结果中,某些字段值桶聚合之后的结果(屏幕尺寸); 在比如,查询最高金额…

14.ES查询中,高亮是什么意思?如何实现高亮查询?

查询结果中,将命中的条件词,用不同的样式标识出来;可以在词的前后加上标签; 设置高亮查询字段,将高亮匹配的结果替换原目标字段原始结果;

15.索引重建步骤如何?

创建新的索引库 将数据进行迁移(索引重建) _reindex 删除旧索引库 重命名新索引库为旧名(避免客户端变更)