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

Elasticsearch核心技术与实战

共100讲 · 约1000分钟
16516
免费
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 | 结束语

精选留言(16)

  • 2019-09-08
    您好,请教一下,对于多语言场景,最佳实践是怎么处理的?比如一个产品需要同时支持德语,法语,俄罗斯语,阿拉伯语等多种语言时,是如何选择分词器?如果建模的?

    作者回复: 方案1。 不同语言用不同索引,例如 orders-cn ,orders-en

    方案二:可以通过设置mulfi field 为期创建多个子字段,这个子字段可以使用不同的分词器。

    至于用户在搜索的时候使用什么语言,可以让用户指定,或者通过http header中的accept language来判定。

    至于你索引的数据,如果你明确知道他所用的语言,用方案一会很简单。否则你需要使用一个学习算法对文档的语言进行归类。有一些现成的库可以使用,例如

    chromiu-compact-language-detector ,基于google的CLD开发,支持160多种语言的detect

    2
  • 代码段一:
    POST address/_search
    {
      "query": {
        "multi_match": {
          "query": "Poland Street W1V",
          "type": "most_fields",
          //"operator": "and",
          "fields": ["street", "city", "country", "postcode"]
        }
      }
    }
    算分:"_score" : 0.8630463,

    代码段二:
    POST address/_search
    {
      "query": {
        "multi_match": {
          "query": "Poland Street W1V",
          "type": "cross_fields",
          "operator": "and",
          "fields": ["street", "city", "country", "postcode"]
        }
      }
    }
    算分:"_score" : 0.8630463,

    代码段三:
    POST address/_search
    {
      "query": {
        "multi_match": {
          "query": "Poland Street W1V",
          "type": "cross_fields",
          "operator": "or",
          "fields": ["street", "city", "country", "postcode"]
        }
      }
    }
    算分:"_score" : 0.8630463,

    问题一:代码段一和二的结果算分一样。用most_fields不加operator也能查到,为何还要用cross_fields?
    问题二:代码段二和三的operator不同,算分也一样,这里的operator起什么作用呢?
    展开
    2
  • 2019-07-26
    如果老师能讲一下类似淘宝直通车案例就好啦,或者老师这方面系统有没有推荐的技术文章可以推荐我们看一下哈

    作者回复: 具体是指哪方面的需求?

    2
    1
  • 2019-07-26
    这篇文章来的非常及时!
    正好在做一个搜索功能,需要中文加拼音混合搜索。
    之前已经用了ik+pinyin分词,词可以分出来了,

    作者回复: 👍

    1
  • 2019-07-24
    老师能否给出在docker容器里(运行着ES/Kibana)安装那些分词器插件的命令?

    作者回复: 第一种方式,需要写Dockerfile,然后去build出你特定的image。你查一下如何写docker image,然后只需要吧插件安装那行命令写进dockerfile即可

    第二种,运行后attach到container中,执行plugin 安装的命令,但是container销毁后,需要重做

    5
    1
  • 老师,Elasticsearch同时用ik和Elasticsearch会影响性能吗?正常情况,会混合一起使用吗

    作者回复: 有中文分词的需求 可以一起使用啊。担心性能 可以做一个性能测试,看看是否满足你的实际负载

  • 2019-09-20
    多语言尤其是中文分词确实复杂,幸好有了,这么多强大的插件。还记得自己之前做过的一个需求通过拼音也能搜索的功能,基于数据库搞的生僻字多音字很麻烦,几乎无法处理?不知道针对多音字这些分词器怎么转化?
  • 2019-09-09
    我在docker中上传了添加ik、pinyin、hanlp三种分词器的elasticsearch镜像。只需要在docker-compose.yaml文件中修改elasticsearch的配置:image: pengliwds/elasticsearch-analysis:7.1.0

    作者回复: 赞👍

  • 2019-08-29
    ES两点很不爽,安了插件居然要重启ES。太逊了!
    第二个,一共3个节点,我先把master节点干掉,留两个master eligible节点,期望其中一个能选为新的master,不幸的是好像整个ES集群就停掉不干活了。我还说靠这种办法来,达到不间断服务呢。

    作者回复: 第一个确实如此。需要rolling restart。
    第二个应该不会这样。

    1
  • 2019-08-27
    老师,请教一下,plugin离线安装,install只能是二进制文件吧?自己编写Dockerfile,使用下载的zip文件是不是解压后还要自行配置对应插件的配置文件

    作者回复: 1. install 必须提供zip文件
    2. 如果安装后需要修改相应目录下的文件,你需要通过在dockerfile中写shell脚本去执行这一些列的操作

  • 2019-08-24
    這幾個分詞器很重要 講的非常好
  • 2019-08-23
    你好,阮老师,我再执行
    PUT /my_index
    {
      "mappings": {
        "blog": {
          "properties": {
            "title": {
              "type": "string",
              "analyzer": "english"
            }
          }
        }
      }
    }
    这条语句的时候,有报错信息如下:
    {
      "error": {
        "root_cause": [
          {
            "type": "mapper_parsing_exception",
            "reason": "Root mapping definition has unsupported parameters: [blog : {properties={title={analyzer=english, type=string}}}]"
          }
        ],
        "type": "mapper_parsing_exception",
        "reason": "Failed to parse mapping [_doc]: Root mapping definition has unsupported parameters: [blog : {properties={title={analyzer=english, type=string}}}]",
        "caused_by": {
          "type": "mapper_parsing_exception",
          "reason": "Root mapping definition has unsupported parameters: [blog : {properties={title={analyzer=english, type=string}}}]"
        }
      },
      "status": 400
    }
    请问如何解决,麻烦有时间看到我的留言提供一下思路,谢谢
    展开
  • 2019-08-13
    老师,elasticsearch-analysis-pinyin-7.3.0.zip的版本如何下载?

    作者回复: 找到github,点开release,提过没有就需要等一下。有些插件需要一定时间才能跟上最新的版本

  • 2019-08-09
    老师,最近遇到一个奇怪的现象,在单机中安装了jieba插件,ik分词插件,pinyin分词插件,其中jieba插件未使用,但是es访问就很慢,本机用curl查询健康状况都慢。
    把jieba分词插件删除后,就恢复了正常。
    本机是用的docker中的es。测试时重置了docker,还是很慢。(之前一段时间有这个插件也相安无事)

    比较好奇,未使用的插件也会对es产生影响么?(看docker logs日志时会有jieba相关的日志。)
    es和插件版本都是6.2的。
    展开

    作者回复: 你可以把相关的问题提到jieba的github上。按照道理你index和search都没有使用,应该不会有什么开销。分词一般会对cpu有开销,你的es慢,你看是cpu消耗大还是有内存方面的gc?

    1
  • 2019-07-31
    老师,一直有个疑问,用了分词的索引字段,elastic 会自动把分词存到索引里面吗?原理是什么?可能我表达不怎么准确。

    作者回复: 数据写入的时候,就会按照字段进行分词并且存入倒排表里

  • 2019-07-28
    老师,目前使用IK分词器,出现一个问题:
    首先这是mapping定义:
    PUT test_index
    {
      "mappings": {
        "doc": {
          "properties": {
            "name":{
              "type": "text",
              "analyzer": "ik_max_word", //"ik_max_word",
              "search_analyzer": "ik_smart"
            }
          }
          
        }
        
      }
      
    }

    然后推入数据:
    PUT /test_index/doc/1
    {
        "name": "张三"
    }

    PUT /test_index/doc/2
    {
        "name": "张三丰"
    }

    PUT /test_index/doc/3
    {
        "name": "张三丰feng"
    }

    PUT /test_index/doc/4
    {
        "name": "张"
    }

    PUT /test_index/doc/5
    {
        "name": "三"
    }

    此时我去查询结果,发现排在最前面的不是“三”这条数据,而是“张三丰”这条数据,感觉很疑惑
    POST /test_index/_search
    {
      "explain": true,
        "query": {
          "term": {
            "name": {
              "value": "三"
            }
          }
        }
    }
    展开

    作者回复: 这不能吧?肯定是

    张三
    张三丰
    张三丰feng

    的排列。我还测试了一下,没有错的

    1