下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 24 | 基于词项和基于全文的搜索
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

Elasticsearch核心技术与实战

共100讲 · 约1000分钟
16602
免费
01 | 课程介绍
免费
02 | 内容综述及学习建议
免费
03 | Elasticsearch简介及其发...
免费
04 | Elastic Stack家族成员及...
免费
05 | Elasticsearch的安装与...
06 | Kibana的安装与界面快速...
07 | 在Docker容器中运行Elas...
08 | Logstash安装与导入数据
09 | 基本概念:索引、文档和...
10 | 基本概念:节点、集群、分...
11 | 文档的基本CRUD与批量操...
12 | 倒排索引介绍
13 | 通过Analyzer进行分词
14 | Search API概览
15 | URI Search详解
16 | Request Body与Query ...
17 | Query String&Simple ...
18 | Dynamic Mapping和常见...
19 | 显式Mapping设置与常见参...
20 | 多字段特性及Mapping中配...
21 | Index Template和Dynami...
22 | Elasticsearch聚合分析简...
23 | 第一部分总结
24 | 基于词项和基于全文的搜索
25 | 结构化搜索
26 | 搜索的相关性算分
27 | Query&Filtering与多字...
28 | 单字符串多字段查询:Dis...
29 | 单字符串多字段查询:Mult...
30 | 多语言及中文分词与检索
31 | Space Jam,一次全文搜索...
32 | 使用Search Template和In...
33 | 综合排序:Function Scor...
34 | Term&Phrase Suggester
35 | 自动补全与基于上下文的提...
36 | 配置跨集群搜索
37 | 集群分布式模型及选主与脑...
38 | 分片与集群的故障转移
39 | 文档分布式存储
40 | 分片及其生命周期
41 | 剖析分布式查询及相关性算...
42 | 排序及Doc Values&Field...
43 | 分页与遍历:From, Siz...
44 | 处理并发读写操作
45 | Bucket & Metric聚合分...
46 | Pipeline聚合分析
47 | 作用范围与排序
48 | 聚合分析的原理及精准度问...
49 | 对象及Nested对象
50 | 文档的父子关系
51 | Update By Query &...
52 | Ingest Pipeline & Pa...
53 | Elasticsearch数据建模实...
54 | Elasticsearch数据建模最...
55 | 第二部分总结回顾
56 | 集群身份认证与用户鉴权
57 | 集群内部安全通信
58 | 集群与外部间的安全通信
59 | 常见的集群部署方式
60 | Hot & Warm架构与Shard...
61 | 分片设计及管理
62 | 如何对集群进行容量规划
63 | 在私有云上管理Elasticsea...
64 | 在公有云上管理与部署Elas...
65 | 生产环境常用配置与上线清...
66 | 监控Elasticsearch集群
67 | 诊断集群的潜在问题
68 | 解决集群Yellow与Red的问...
69 | 提升集群写性能
70 | 提升进群读性能
71 | 集群压力测试
72 | 段合并优化及注意事项
73 | 缓存及使用Breaker限制内...
74 | 一些运维的相关建议
75 | 使用Shrink与Rollover AP...
76 | 索引全生命周期管理及工具...
77 | Logstash入门及架构介绍
78 | 利用JDBC插件导入数据到El...
79 | Beats介绍
80 | 使用Index Pattern配置数...
81 | 使用Kibana Discover探索...
82 | 基本可视化组件介绍
83 | 构建Dashboard
84 | 用Monitoring和Alerting监...
85 | 用APM进行程序性能监控
86 | 用机器学习实现时序数据的...
87 | 用机器学习实现时序数据的...
88 | 用ELK进行日志管理
89 | 用Canvas做数据演示
90 | 项目需求分析及架构设计
91 | 将电影数据导入Elasticsea...
92 | 搭建你的电影搜索服务
93 | 需求分析及架构设计
94 | 数据Extract & Enrichm...
95 | 构建Insights Dashboard
96 | Elastic认证介绍
97 | 考点梳理
98 | 集群数据备份
99 | 基于Java和Elasticseach构...
100 | 结束语
本节摘要
展开

精选留言(25)

  • 2019-07-14
    ES是如何处理日期类型数据的时区的?

    作者回复: date类型是包含时区信息的,如果我们没有在json代表日期的字符串中显式指定时区,对es来说没什么问题,

    但是如果通过kibana显示es里的数据时,就会出现问题,数据的时间会晚8个小时。因为kibana从es里读取的date类型数据,没有时区信息,

    kibana会默认当作0时区来解析,但是kibana在通过浏览器展示的时候,会通过js获取当前客户端机器所在的时区,也就是东八区,

    所以kibana会把从es得到的日期数据减去8小时。这里就会导致kibana经常遇到的“数据时间延迟8小时”的问题。

    所以最佳实践方案就是:我们在往es提交日期数据的时候,直接提交带有时区信息的日期字符串,如:“2016-07-15T12:58:17.136+0800”。


    ##索引中定义的日期格式与提交数据的日期格式要一致,否则会报错。

    1
    6
  • 2019-07-13
    老师第二部分的pdf麻烦上传下

    作者回复: 好的,我让编辑帮我生成后,我github上传。下周一周二吧

    6
  • 2019-07-12
    老师有一个问题,term查询是不分词的,哪怕我们设置了该字段的搜索分词也不分吗?
    match是分词的,哪怕我们没有设置搜索分词也会分吗?

    作者回复: 如果字段设置了keyword,你用term查询,就会精确匹配。例如说keyword字段,索引时是“Iphone”,你的term查询必须是Iphone,输入“iphone”就无法匹配。

    而如果你的字段是“text”类型。你index时候,如果是“Iphone”,在term查询时,“iphone”可以匹配。但是,“Iphone”不会。很多刚接触的同学会有点困惑。背后的原因是,text类型的数据会分词,默认分词器会将输入一个个单词切开,并且转小写了。所以你 term查询时,必须用“iphone”


    如果你是match查询,在text字段上查询iphone或者Iphone 应该都能查到。

    课上提供的例子你可以运行测试一下。

    1
    3
  • 2019-07-14
    最后一个课堂问题:对多值字段进行精确匹配提到要用到genre_count组合bool query实现,老师能给个参考实现吗?

    作者回复: 看一下这个,建模时,加入了tags_count的字段,然后通过bool 查询中,加入一个filter,过滤tags个数

    PUT my_movies/_doc/1
    {
      "title":"movie title action",
      "tags":["action"],
      "tags_count":1
    }

    PUT my_movies/_doc/2
    {
      "title":"movie title love",
      "tags":["action","love"],
      "tags_count":2
    }

    POST my_movies/_search
    {
      "query": {
        "bool": {
          "must": [
            {"match": {
              "tags": "action"
            }}
          ],
          "filter": {
            "term": {
              "tags_count": 1
            }
          }
        }
      }
    }

    2
  • 2019-07-14
    GET products/_mapping 查看索引的信息,没有看到分词器相关信息,是不是默认在text类型上应用standard的分词器?其他的数据类型boolean,date,long不会分词?

    {
      "products" : {
        "mappings" : {
          "_doc" : {
            "properties" : {
              "avaliable" : {
                "type" : "boolean"
              },
              "date" : {
                "type" : "date"
              },
              "price" : {
                "type" : "long"
              },
              "productID" : {
                "type" : "text",
                "fields" : {
                  "keyword" : {
                    "type" : "keyword",
                    "ignore_above" : 256
                  }
                }
              }
            }
          }
        }
      }
    }
    展开

    作者回复: 理解正确。如果你在mapping中指定了其他的分词器,例如“english”,get时就能看到了

    1
  • 2019-07-13
    老师,文档上也看到了filter 忽略了算分的步骤,而且可以缓存。那么 我们目前用不到分值是不是可以把条件都写在filter里呢?缓存压力会不会过大,会不会类似oversharding的效果?或者说有哪些负面影响?

    作者回复: overshard的意思是,分片数设置过多。能用filter context就尽量不要用query content,应该不存在什么负面影响

    1
  • 2019-11-23
    请问百亿级数据通配符(wildcard)查询有解决方案吗?
    ABCDE 的通配符匹配是否与下面的分词检索等价?如果等价,下面这种分词方式学名叫啥?有可选的 analyzer 吗?
    A
    AB
    ABC
    ABCD
    ABCDE
    ---
    B
    BC
    BCD
    BCDE
    ---
    C
    CD
    CDE
    ---
    D
    DE
    ---
    E
    展开
  • 2019-09-21
    老师,term查询,对输入不做分词,那为啥根据
    "term": {
          "productID": {
            "value": "XHDK-A-1293-#fJ3"
          }
    }
    查询不到文档数据呢,而
    "term": {
          "productID.keyword": {
            "value": "XHDK-A-1293-#fJ3"
          }
    }
    却可以查询到数据呢?

    实际上term查询是不是也做了分词?
    展开
    1
  • 2019-09-20
    打卡,点赞,开始深入。
  • 2019-09-16
    mininum_should_match 这个参数是什么意思,有个 term 和 match 的查询都能使用这个参数吗
  • 老师你好,为什么我用python查询返回的数据是单引号的字典,这样我很难转成json
  • 2019-08-26
    GET _search
    {
      "query": {
        "term": {
          "tag": {
            //"value": "MySQL"
            "value": "mysql"
          }
        }
      }
    }


    GET _search/
    {
      "query":{
        "constant_score": {
          "filter": {
            "term": {
              "tag": "mysql"
            }
          }
        }
      }
    }

    POST _cache/clear

    1、通过POST _cache/clear清理缓存,搜索一个计算得分的DSL,再通过清理缓存,搜索第二个不计算得分的DSL,发现计算得分还快一点,这个是为什么呢?难道说清理缓存的方式不对?请老师帮忙解答一下
    展开
  • 2019-08-26
    Wildcard 的 max_score 是 1.0,是不是转换成 constant_score 也不能提速?
  • 2019-08-08
    讲的挺仔细的,帮助很快入门
  • 2019-08-07
    老师好,昨天提了一个问题,今天看了一下执行计划,通过uri方式的get请求,默认都会把text类型的字段进行拆分再转化为小写后,才进行termQuery查询;而RequertBody才是真正意义上的term查询(不会进行处理),很好奇这两种查询方式为什么会有这种差异呢?是否有什么缘由?求解答!

    作者回复: dsl里面有term query和match query 两种。term query不分词,match query分词。正事情况下,用rrquest body query结合dsl才是最常见的写法

  • 2019-07-31
    最近事多 一周多没看了 今天从头复习了一遍到这个视频 又产生了一个疑问。
    比如:
    POST groups/_doc
    {
      "names": [ "John Water", "Water Smith"]
    }
    我的理解是 它存储的时候会使用默认的分词器 把names 分成 john,water,water和smith。
    然后我再结合前面倒排索引那一节 简单画了下倒排索引表如下。
    根据names这个属性 直接创建倒排索引表
    John --->1(文档ID) 1(词频) 0(开始位置) 0,1 (偏移)
    water.......,
    smith.........
    如果使用term查询 理解起来感觉会容易些 直接从倒排索引表一查就可以了。
     那么如果使用match_phrase查询的时候 比如查询条件 names :"John Smith" "slop": 2 ,它先分词 也没问题,但它分完词之后 接着是怎么去查询的呢,是查询倒排索引吗,还是有什么其他的处理,不太容易理解。
    展开
  • 2019-07-29
    老师,请教一下计算出的分数score的意义是什么?

    作者回复: 越高,说明相关度越高。es默认对搜索结果的算分降序排序

  • 2019-07-20
    请问一下老师filter可以利用缓存具体是什么意思,可以利用哪里的缓存,怎么用的呢?
  • 2019-07-18
    老师,"value": "iPhone" 这个值是es里实际存储的值,为什么查不到呢?//"value":"iphone" 小写的却可以查询到,谢谢~

    POST /products/_search
    {
      "query": {
        "term": {
          "desc": {
            "value": "iPhone"
            //"value":"iphone"
          }
        }
      }
    }
    展开

    作者回复: 因为desc被分词了(默认分词器还会转小写)。如果要做精确匹配,需要要看keyword类型的字段。

  • 2019-07-18
    precision和recall是干啥的,我好像看视频上没讲,不会是我漏看了吧

    作者回复: 相关度算分里有?
    precision指的是查准率
    recall 指的是查全率