ElasticSearch 第一部分总结及测试

ElasticSearch 第一部分总结及测试

第一部分总结与回顾:

产品与使用场景

  • ElasticSearch 是一个开源的分布式搜索与分析引擎,提供了 近实时搜索聚合 两大功能
  • Elastic Stack 包括 ElasticSearch,Kibana,Logstash,Beats 等一系列产品
    • ElasticSearch 是核心引擎,提供了海量数据的存储,搜索和聚合的能力。
    • Logstash 是用来做数据转换
    • Kibana 是提供了丰富的可视化展现于分析的功能
    • Beats 是轻量级的数据采集器
  • Elastic Stack 主要被广泛应用于:搜索,日志管理,安全分析,指标分析,业务分析,应用性能监控等多个领域
  • Elastic Stack 开源了 X-Pack 在内的相关代码。
    • 作为商业解决方案,X-Pack 的部分功能需要收费。7.1后,Security 功能可以免费使用
  • 相比关系型数据库,ElasticSearch 提供了如 模糊查询、搜索条件的算分等 关系型数据库不擅长的功能,但在事务性等方面,也不如关系型数据库的强大。因此,在实际生产环境中,需要考虑具体业务要求,综合使用

基本概念

  • 一个 ElasticSearch 集群可以运行在单节点上,也支持运行在多个服务器上,实现数据和服务的水平扩展

  • 从逻辑角度看,索引是一些具有相似结构的文档的集合

  • 物理角度看,分片是一个 Lucene 的实例。

    • 分片存储了索引的具体数据
    • 分片可以分布在不同节点上
    • 副本分片除了提高数据的可靠性,还能一定程度提升集群的查询性能
  • ElasticSearch 的文档可以试任意的 JSON 格式的数据

  • 将文档写入 ElasticSearch 的过程叫做索引(indexing)

  • ElasticSearch 提供了REST API 和 Transport API 两种方式,建议用 REST API

ElasticSearch 的两大基本功能:搜索和聚合

  • Precosion 指除了相关的结果,还返回了多少不想关的结果

  • Recall 衡量有多少相关的结果,实际上并没有返回

  • 精确值包括:数字、日期、和某些具体的字符串、keyword,精确词不需要被分词

  • 全文本:是需要被检索的非结构文本

  • Analyis 是将文本转换成倒排索引的 Terms 的过程

  • ElasticSearch 的 Analyzer 是 Char_filter -> Tokenizer -> Token Filter 的过程

  • 要善于用 _analyze API 去测试 Analyzer

  • ElasticSearch 提供了 Bucket / Pipeline / Matrix 四种方式的聚合

文档的CRUD 与 文档 Index Mapping

  • 除了CRUD 操作外,ElasticSearch 还提供了 bulk,mget,msearch 等操作
    • 从新能的角度上说,建议使用,以提升性能。但是单词操作的数据量不要过大,一面引发性能问题
  • 每个索引都有一个 Mapping 定义
    • 包括文档的字段及类型,字段的 Analyzer 的相关配置
  • Mapping 可以被动态的创建,为了避免一些错误类型的推算或者满足你的特定需求,可以显式的定义Mapping
  • 可以在 Mapping 中定制 Analyzer ,可以为字段指定定制化的 Analyzer ,也可以在查询字符串指定 search_analyzer
  • Index Template 可以定义 Mappings 和 Settings,并自动的应用到新创建的索引之上,建议要合理的使用 Index Template
  • Dynamic Template 支持在具体的索引上定制规则,为新增加的字段指定相应的 Mappings

小测试

  • ES 支持使用HTTP PUT 写入新文档,并通过 ElasticSearch 自动生成文档 ID

    错误。

    ES 支持使用HTTP PUT 写入新文档(index/create),但是不能自动生成文档 ID,POST 写入新文档时可以自动生成 ID

  • Update 一个文档,需要使用 HTTP PUT

    错误。

    PUT 只支持create、index 创建文档

    Update 文档需要用 POST

  • Index 一个已存在的文档,旧的文档会仙贝删除,新的文档再被写入,同时版本号加一

    正确

  • 尝试描述创建一个新的文档到一个不存在的索引中,背后会发生一些什么?

    默认情况下,会自动创建相应的索引,并自己设置 Mapping,当然,实际情况还要看是否有合适的 Index Template

  • ES7 中合法的 type 是什么?

    ES7 中,一个索引只能有一个 type,是 _doc

  • 精确值和全文本的本质区别是什么?

    精确值指的是 :数值、日子、整体的字符串、keyword

    全文本指的是:非结构化的字符串

    精确值不需要被 Analyzer 分词,全文本会

  • Analyzer 由哪几部分组成?

    Character Filters :去除一些字符串,如:html标签、自定义正则替换等

    Tokenizer : 切分词的规则,如:按空格、中文词语等

    Token Filter : Tokenizer 分词后的结果进行再加工,包括字符处理,过滤,删除等操作,如 :转小写、去除停用词、添加同义词等

  • 尝试描述 match 和 match_phrase 的区别

    match 中的terms 之间是 OR 的关系,

    match_phrase 的terms 之间是 AND 的关系,并且 term 之间的位置关系也会影响搜索的结果

  • 如果你希望 match_phrase 匹配到更多结果,你应该配置查询中的什么参数?

    slop

    slop参数告诉match_phrase查询词条能够相隔多远时仍然将文档视为匹配。

    GET /my_index/_search
    {
        "query": {
            "match_phrase": {
                "title": {
                    "query": "abc ccc",
                    "slop":  1
                }
            }
        }
    }
    
  • 如果 Mapping 的 dynamic 设置为 “strict” ,索引一个包含新正字段的文档会发生什么?设置为 ”false“ 呢?

    如果 Mapping 的 dynamic 为 “strict”,会直接报错

    如果为 false,整个文档是可以被索引的,新的字段在 _source 可见,但该字段不能被搜索

  • 可以把一个字段的类型从 ”integer“ 改成 ”long“ ,因为这两个类型是兼容的

    错误。

    字段类型修改,需要 reindex

  • 你可以在 Mapping 文件中为 indexing 和 searching 指定不同的 analyzer

    可以

    PUT products
    {
      "mappings": {
        "properties": {
          "content": {
            "type": "text",
            "analyzer": "ik_max_word",
            "search_analyzer": "ik"
          }
        }
      }
    }
    
  • 字段类型为 Text 的字段,一定可以被全文搜索

    不一定,如果字段的 index 设置为 false,则不会被索引

    PUT myindex/
    {
      "mappings": {
          "properties": {
            "name":{
              "type": "text",
              "index": false
            }
          }
      }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值