Elasticsearch:映射(mapping)的实用实践指南

这篇具有很好参考价值的文章主要介绍了Elasticsearch:映射(mapping)的实用实践指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Elasticsearch:映射(mapping)的实用实践指南,Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索

动态映射适用于开发环境,但对于生产级集群禁用它。 将动态配置为 “strict” 以对索引的字段值实施严格模式。有关动态映射的详细描述,请阅读文章 “Elasticsearch:Dynamic mapping”。

PUT /twitter
{
  "mappings": {
    "dynamic": "strict",
    "properties": {
      "subscriptionName": {
        "type": "text"
      }
    }
  }
}

当文档大量存储时,可以在定义字段映射时使用优化来节省磁盘空间。

禁用强制(coerce)。强制给你自由,但缺乏纪律。 导致混乱。有关 coerce 的更多描述,请参阅文章 “Elasticsearch:Elasticsearch 中的数据强制匹配”。

PUT /product/_doc/1
{
  "price": 890.90
}

PUT /product/_doc/2
{
  "price": "890.90"
}

我们可以看出来,第一个是成功的。针对第二个命令,虽然指定为字符串,但 ES 只看到引号 “” 内的浮点数,将数据结构存储为浮点数。它将是成功的。

我们接下来使用如下的命令来写入另外一个文档:

PUT /product/_doc/3
{
  "price": "890.90m"
}

上面的命令返回:

{
  "error": {
    "root_cause": [
      {
        "type": "document_parsing_exception",
        "reason": "[2:12] failed to parse field [price] of type [float] in document with id '3'. Preview of field's value: '890.90m'"
      }
    ],
    "type": "document_parsing_exception",
    "reason": "[2:12] failed to parse field [price] of type [float] in document with id '3'. Preview of field's value: '890.90m'",
    "caused_by": {
      "type": "number_format_exception",
      "reason": "For input string: \"890.90m\""
    }
  },
  "status": 400
}

这会失败,因为它在内部以浮点形式存储在数据结构中。

我们使用如下的命令来获得文档 2:

GET /product/_doc/2

上面的命令返回:

{
  "_index": "product",
  "_id": "2",
  "_version": 1,
  "_seq_no": 1,
  "_primary_term": 1,
  "found": true,
  "_source": {
    "price": "890.90"
  }
}

从上面的输出中,我们可以看到 price 的值还是以字符串的形式来存储的。

我们可以做如下的查询:

GET product/_search?filter_path=**.hits
{
  "query": {
    "range": {
      "price": {
        "gte": 890.90
      }
    }
  }
}

上面的命令返回的结果为:r

{
  "hits": {
    "hits": [
      {
        "_index": "product",
        "_id": "1",
        "_score": 1,
        "_source": {
          "price": 890.9
        }
      },
      {
        "_index": "product",
        "_id": "2",
        "_score": 1,
        "_source": {
          "price": "890.90"
        }
      }
    ]
  }
}

从上面的输出中,我们可以看到尽管文档 2 的 price 为 “890.90” 字符串类型,但是查询的结果还是包含它。我们如果做如下的查询:

GET product/_search
{
  "query": {
    "match": {
      "prce": "890.90"
    }
  }
}

上述查询不会有任何的结果,这个是因为 price 为 float 类型。

请注意数字数据类型,如果足够的话请使用 float,因为 double 需要更多空间。 如果足够的话就使用 Integer,因为 Long 占用更多空间。

对于字符串字段,不需要同时使用文本和关键字映射。 使用多重映射需要空间。 仅当需要聚合、排序、精确匹配过滤时才使用关键字,以确保不进行分词。 使用文本进行全文搜索。 仅在需要时同时使用两者。

多字段(multi-feild)映射 - 将 keyword 映射添加到文本字段

PUT /subscriptions
{
  "mappings": {
    "properties": {
      "description": {
        "type": "text"
      },
      "subscriptionsName": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

写入一个文档:

POST /subscriptions/_doc
{
  "description": "Detailed subs...",
  "subscriptionsName": ["Monthly", "Weekly", "Quarterly"]
}

查询文档:

GET /subscriptions/_search
{
  "query": {
    "match_all": {}
  }
}

查询文本:

GET /subscriptions/_search
{
  "query": {
    "match": {
      "subscriptionsName": "Monthly"
    }
  }
}

对 keyword 字段进行查询:

GET /subscriptions/_search
{
  "query": {
    "term": {
      "subscriptionsName.keyword": "Monthly"
    }
  }
}

有关 keyword 及 text 查询的比较,请详细阅读文章 “Elasticsearch:Text vs. Keyword - 它们之间的差异以及它们的行为方式”。

当不需要排序、聚合、过滤时,请将 doc_value 设置为 false。

当不需要相关性评分时,设置 norms 为 false

当不需要对值进行过滤时,请将 index 设置为 false(仍然可以进行聚合,例如时间序列数据)。文章来源地址https://www.toymoban.com/news/detail-517635.html

到了这里,关于Elasticsearch:映射(mapping)的实用实践指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch:Explicit mapping - 显式映射

    显式映射相比较动态映射(Dynamic mapping)是需要我们在索引创建时就定义字段及其类型。这个和我们传统的 RDMS 数据库一样,在我们写入数据到数据库之前,我们需要工整地定义好每个字段及其类型和长度。Elasticsearch 既可以使用显式映射也可以同时使用动态映射。在许多的

    2024年02月02日
    浏览(46)
  • elasticsearch中文档映射Mapping用法详解

    Mapping类似数据库中的schema的定义,作用如下: 定义索引中的字段的名称 定义字段的数据类型,例如字符串,数字,布尔等 字段,倒排索引的相关配置(Analyzed or Not Analyzed,Analyzer) ES中Mapping映射可以分为动态映射和静态映射。 动态映射:         在关系数据库中,需要事先创

    2024年02月16日
    浏览(43)
  • es elasticsearch 八 mapping 映射 、复杂数据类型

    目录 Mapping 映射 复杂数据类型 Mapping 映射 精确匹配 必须和对应字段值安全一致才可查出 全文检索 缩写搜索全程、格式转换 大小写 同义词 全文检索核心原理 分词,初步的倒排索引的建立 重建倒排索引 时态转换、重复数的转换、同义词的转换、大小写的转换 分词器 analy

    2024年02月07日
    浏览(57)
  • 【Elasticsearch学习笔记二】es的Mapping字段映射、Mapping字段常用类型、Mapping映射的创建、查看和更新、es数据迁移、ik分词器

    目录 1、Mapping字段映射概述 2、Mapping字段常用类型 3、映射中对时间类型详解 1)采取自动映射器来映射 2)手工映射提前指定日期类型 4、ES的keyword的属性ignore_above 5、Mapping映射的查看和创建 1)查看mapping信息:GET 索引名/_mapping 2)创建映射:PUT /索引名 3) 查看所有索引映

    2024年01月20日
    浏览(61)
  • Elasticsearch:实用指南

    我们将更多地讨论使用 Elasticsearch 的最佳实践。这些做法是一般性建议,可以应用于任何用例。 让我们开始吧。 批量 API 使得在单个 API 调用中执行许多索引/删除操作成为可能。 这可以大大增加索引速度。 每个子请求都是独立执行的,因此一个子请求的失败不会影响其他子

    2024年02月08日
    浏览(43)
  • Elasticsearch实践:Setting、Mapping

    版本:Elasticsearch 6.2.4。 Mapping类似于数据库中的表结构定义,主要作用如下: 定义Index下字段名(Field Name) 定义字段的类型,比如数值型,字符串型、布尔型等 定义倒排索引的相关配置,比如是否索引、记录postion等 Mapping完整的内容可以分为四部分内容: 字段类型(Field d

    2024年02月04日
    浏览(38)
  • Elasticsearch索引优化指南:分片、副本、mapping和analyzer

    Elasticsearch是一个开源的分布式搜索引擎,它的数据存储和查询速度非常快。然而,在面对大规模的数据集和高并发访问时,Elasticsearch的性能也可能受到一些影响。为了最大程度地提高Elasticsearch的性能,我们需要对索引进行优化。本篇博客将介绍Elasticsearch索引优化的几个关键

    2024年02月20日
    浏览(47)
  • Elasticsearch权威指南:深度解析搜索技术核心概念、原理及实践

    作者:禅与计算机程序设计艺术 2010年,当时仅仅30岁的Elasticsearch创始人黄文坚就率先发布了开源分布式搜索引擎Elasticsearch。从此, Elasticsearch 名扬天下,成为了当前搜索领域的翘楚。随着 Elasticsearch 的快速崛起,越来越多的人开始关注并应用 Elasticsearch 来进行搜索服务。

    2024年02月10日
    浏览(65)
  • Elasticsearch:NLP 和 Elastic:入门

    自然语言处理 ( N atural L anguage P rocessing - NLP) 是人工智能 (AI) 的一个分支,专注于尽可能接近人类解释的理解人类语言,将计算语言学与统计、机器学习和深度学习模型相结合。 AI - Artificial Inteligence 人工智能 ML - Machine Learning 机器学习 DL - Deep Learning  深度学习 NLP - Naturual L

    2024年02月05日
    浏览(48)
  • Elasticsearch8重置elastic用户密码

    elastic可以说是es中预留的一个用户名,在按照官网yum安装方法安装启动后通过下面的方式测试是否正确运行 因为安装完成后自动开启了安全访问,所以必须要加 --cacert参数指定安装自动生成的认证文件,协议必须是https,但是结果返回了: 很纳闷,不知道为啥,既然是无法认

    2024年02月12日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包