(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.两个条件排序冲突怎么办???

比如距离和价格,如何排序。

你可能感兴趣的:(中间件,elasticsearch,java,spring)