【中间件|(ElasticSearch02)day80分布式查漏补缺】
ElasticSearch02
- 1.DSL查询分类:
- 2.match和multi_match的区别是什么?
- 3.精确查询常见的有哪些?
- 4.相关性算法。
- 5.seo ,根据算法的规则,去优化自己网站的名字等。让搜索往前。
- 6.function score query定义的三要素是什么?
- 7.bool查询有几种逻辑关系?
- 8.需要注意的是,搜索时,参与**打分的字段越多,查询的性能也越差**。
- 9.报错看reason里面的
- 10.elasticsearch支持对搜索结果排序:
- 11.按地图搜索:不需要分数,需要按sort直线距离排序。
- 12.深度分页问题:
- 13.针对深度分页,ES提供了两种解决方案:
- 14.分页查询的常见实现方案以及优缺点:
- 15.搜索关键字高亮:是通过给关键字加一些前缀后缀标签,在通过css来实现的.
- 16.搜all想设置高亮,得设置一下。
- 17.< em >标签是啥。
- 18.idea快捷键:ctrl+alt+m:抽取方法。
- 19.谷歌浏览器不能上传传地理位置。
- 20.前后端数据如何传递???怎么定义返回类型和接收类型。
- 21.matchQuery这个查询和term查询有什么区别
- 22.两个条件排序冲突怎么办???
1.DSL查询分类: Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括:
- 查询所有:查询出所有数据,一般测试用。例如:match_all。默认展示前十条。
- 全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:
- match_query
- multi_match_query
- 精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如:
- ids
- term
- range
- 地理(geo)查询:根据经纬度查询。例如:
- geo_distance
- geo_bounding_box
- 复合(compound)查询:复合查询可以将上述各种查询条件组合起来,合并查询条件。例如:
- bool
- function_score
2.match和multi_match的区别是什么? 其他字段都利用copy_to复制到了all字段中,字段搜索效果是一样的
- match:根据一个字段查询,all在创建的时候就建立好索引了,搜索效率高。
- multi_match:根据多个字段查询,参与查询字段越多,查询性能越差
- term查询:根据词条精确匹配,一般搜索keyword类型、数值类型、布尔类型、日期类型字段
- range查询:根据数值范围查询,可以是数值、日期的范围
geo查询:km单位必须小写,不然识别不了。
4.相关性算法。 elasticsearch会根据词条和文档的相关度做打分,算法由两种:
- TF-IDF算法(分差比较大,不利于商业竞价排名)
- BM25算法,elasticsearch5.1版本后采用的算法
- 过滤条件:哪些文档要加分
- 算分函数:如何计算function score
- 加权方式:function score 与 query score如何运算
- must:必须匹配的条件,可以理解为“与”
- should:选择性匹配的条件,可以理解为“或”
- must_not:必须不匹配的条件,不参与打分
- filter:必须匹配的条件,不参与打分
must,用于关键字查询,会算分,效率低
filter其他过滤条件,不会算分,不太影响效率。
8.需要注意的是,搜索时,参与打分的字段越多,查询的性能也越差。 因此这种多条件查询时,建议这样做:
- 搜索框的关键字搜索,是全文检索查询,使用must查询,参与算分
- 其它过滤条件,采用filter查询。不参与算分
可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等。
注意:只有不能被分词的字段才能排序。
11.按地图搜索:不需要分数,需要按sort直线距离排序。 12.深度分页问题: elasticsearch 默认情况下只返回top10的数据。
如果要查很多数据,分页会把前面所有的数据查出来,再进行截取。很消耗内存。
13.针对深度分页,ES提供了两种解决方案:
- search after:分页时需要排序,原理是从上一次的排序值开始,查询下一页数据。官方推荐使用的方式。
- scroll:原理将排序后的文档id形成快照,保存在内存。官方已经不推荐使用。
14.分页查询的常见实现方案以及优缺点:
-
from + size
:
- 优点:支持随机翻页
- 缺点:深度分页问题,默认查询上限(from + size)是10000
- 场景:百度、京东、谷歌、淘宝这样的随机翻页搜索
-
after search
:
- 优点:没有查询上限(单次查询的size不超过10000)
- 缺点:只能向后逐页查询,不支持随机翻页
- 场景:没有随机翻页需求的搜索,例如手机向下滚动翻页
-
scroll
:
- 优点:没有查询上限(单次查询的size不超过10000)
- 缺点:会有额外内存消耗,并且搜索结果是非实时的
- 场景:海量数据的获取和迁移。从ES7.1开始不推荐,建议用 after search方案。
- 高亮是对关键字高亮,因此搜索条件必须带有关键字,而不能是范围这样的查询。
- 默认情况下,高亮的字段,必须与搜索指定的字段一致,否则无法高亮
- 取出来的结果加高亮,存储的数据不会被改动。
# 查询字段跟高亮字段不一致
GET /hotel/_search
{
"query": {
"match": {
"all": "如家"
}
},
"highlight": {
"fields": {
"name": {
"pre_tags": "",
"post_tags": "",
"require_field_match": "false"
}
}
}
}
17.< em >标签是啥。
- < em >表示一般的强调文本,这个标签具有语义。该标签中的内容在搜索引擎中更受重视,一些语音阅读器也会根据它在阅读时加强语气。
分词的用matchQuery
22.两个条件排序冲突怎么办??? 比如距离和价格,如何排序。
推荐阅读
- java|win7下Elasticsearch、Kibana安装
- java|关于ElasticSearch版本7.8.0进行排坑
- 微服务专题笔记|ElasticSearch——DSL查询及结果处理
- Elasticsearch掰开揉碎第3篇windows环境搭建
- Elasticsearch掰开揉碎第2篇linux环境搭建
- 低代码-业务流程引擎
- 前端基础和框架使用|Vue的异步渲染axios
- java|程序员加班实用贴 | 每日趣闻
- 人工智能|复旦博士生写了130行代码,用OCR和正则表达式快速搞定核酸报告统计!