中间件|(ElasticSearch02)day80分布式查漏补缺

【中间件|(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
match分词查询,term精准匹配,range范围查询
2.match和multi_match的区别是什么? 其他字段都利用copy_to复制到了all字段中,字段搜索效果是一样的
  • match:根据一个字段查询,all在创建的时候就建立好索引了,搜索效率高。
  • multi_match:根据多个字段查询,参与查询字段越多,查询性能越差
3.精确查询常见的有哪些?
  • term查询:根据词条精确匹配,一般搜索keyword类型、数值类型、布尔类型、日期类型字段
  • range查询:根据数值范围查询,可以是数值、日期的范围
注意:term:不会分词,你写什么就搜什么。
geo查询:km单位必须小写,不然识别不了。
4.相关性算法。 elasticsearch会根据词条和文档的相关度做打分,算法由两种:
  • TF-IDF算法(分差比较大,不利于商业竞价排名)
  • BM25算法,elasticsearch5.1版本后采用的算法
5.seo ,根据算法的规则,去优化自己网站的名字等。让搜索往前。 6.function score query定义的三要素是什么?
  • 过滤条件:哪些文档要加分
  • 算分函数:如何计算function score
  • 加权方式:function score 与 query score如何运算
7.bool查询有几种逻辑关系?
  • must:必须匹配的条件,可以理解为“与”
  • should:选择性匹配的条件,可以理解为“或”
  • must_not:必须不匹配的条件,不参与打分
  • filter:必须匹配的条件,不参与打分
注意:
must,用于关键字查询,会算分,效率低
filter其他过滤条件,不会算分,不太影响效率。
8.需要注意的是,搜索时,参与打分的字段越多,查询的性能也越差。 因此这种多条件查询时,建议这样做:
  • 搜索框的关键字搜索,是全文检索查询,使用must查询,参与算分
  • 其它过滤条件,采用filter查询。不参与算分
9.报错看reason里面的 10.elasticsearch支持对搜索结果排序: 默认是根据相关度算分(_score)来排序。
可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等。
注意:只有不能被分词的字段才能排序。
11.按地图搜索:不需要分数,需要按sort直线距离排序。 12.深度分页问题: elasticsearch 默认情况下只返回top10的数据。
如果要查很多数据,分页会把前面所有的数据查出来,再进行截取。很消耗内存。
13.针对深度分页,ES提供了两种解决方案:
  • search after:分页时需要排序,原理是从上一次的排序值开始,查询下一页数据。官方推荐使用的方式。
  • scroll:原理将排序后的文档id形成快照,保存在内存。官方已经不推荐使用。
注意:search after不可以返回上一页,查询指针方法,手机端可以用。
14.分页查询的常见实现方案以及优缺点:
  • from + size
    • 优点:支持随机翻页
    • 缺点:深度分页问题,默认查询上限(from + size)是10000
    • 场景:百度、京东、谷歌、淘宝这样的随机翻页搜索
  • after search
    • 优点:没有查询上限(单次查询的size不超过10000)
    • 缺点:只能向后逐页查询,不支持随机翻页
    • 场景:没有随机翻页需求的搜索,例如手机向下滚动翻页
  • scroll
    • 优点:没有查询上限(单次查询的size不超过10000)
    • 缺点:会有额外内存消耗,并且搜索结果是非实时的
    • 场景:海量数据的获取和迁移。从ES7.1开始不推荐,建议用 after search方案。
15.搜索关键字高亮:是通过给关键字加一些前缀后缀标签,在通过css来实现的. 注意:
  • 高亮是对关键字高亮,因此搜索条件必须带有关键字,而不能是范围这样的查询。
  • 默认情况下,高亮的字段,必须与搜索指定的字段一致,否则无法高亮
  • 取出来的结果加高亮,存储的数据不会被改动。
16.搜all想设置高亮,得设置一下。
# 查询字段跟高亮字段不一致 GET /hotel/_search { "query": { "match": { "all": "如家" } }, "highlight": { "fields": { "name": { "pre_tags": "", "post_tags": "", "require_field_match": "false" } } } }

17.< em >标签是啥。
  • < em >表示一般的强调文本,这个标签具有语义。该标签中的内容在搜索引擎中更受重视,一些语音阅读器也会根据它在阅读时加强语气。
18.idea快捷键:ctrl+alt+m:抽取方法。 19.谷歌浏览器不能上传传地理位置。 20.前后端数据如何传递???怎么定义返回类型和接收类型。 21.matchQuery这个查询和term查询有什么区别 term是keyword类型
分词的用matchQuery
22.两个条件排序冲突怎么办??? 比如距离和价格,如何排序。

    推荐阅读