zoukankan      html  css  js  c++  java
  • elasticsearch中的mapping简介

    默认mapping


    ES能非常聪明的识别出"name"和"description"字段的类型是string, ES默认会创建以下的mapping。

    mappings: {
        item: {   
            properties: {
                description: {
                    type: string
                }
                name: {
                    type: string
                }
            }
        }
    }

    mapping参数
     字段中的type(es数据类型)                                                                                                   
    1.text  字符串,分词,全文索引

    2.keyword  关键字,不分词,适合id,email等这种不分词的字段

    3.numeric 数字类型有integer、long、short、byte、double、float等类型  

    4.date  时间类型

    5.boolean   布尔类型

    6.binary    接收base64编码的字符串

    7.rang    具体有integer_range,float_range,long_range,double_range,date_range,ip_range,可存储范围数据,如下插入

    什么是mapping

    ES的mapping非常类似于静态语言中的数据类型:声明一个变量为int类型的变量, 以后这个变量都只能存储int类型的数据。同样的, 一个number类型的mapping字段只能存储number类型的数据。

    同语言的数据类型相比,mapping还有一些其他的含义,mapping不仅告诉ES一个field中是什么类型的值, 它还告诉ES如何索引数据以及数据是否能被搜索到。

    当你的查询没有返回相应的数据, 你的mapping很有可能有问题。当你拿不准的时候, 直接检查你的mapping。

    剖析mapping

    一个mapping由一个或多个analyzer组成, 一个analyzer又由一个或多个filter组成的。当ES索引文档的时候,它把字段中的内容传递给相应的analyzer,analyzer再传递给各自的filters。

    filter的功能很容易理解:一个filter就是一个转换数据的方法, 输入一个字符串,这个方法返回另一个字符串,比如一个将字符串转为小写的方法就是一个filter很好的例子。

    一个analyzer由一组顺序排列的filter组成,执行分析的过程就是按顺序一个filter一个filter依次调用, ES存储和索引最后得到的结果。

    总结来说, mapping的作用就是执行一系列的指令将输入的数据转成可搜索的索引项。

    对于 String 字段,可以设置类型为 text 或者 keyword。text类型的数据会被分词处理,而 keyword 类型的数据不会被分词处理。因此想根据某个字段精确查询的话,可以将其设置为 keyword 类型(版本5.0之后)。

    如果一个索引库已经存在索引文档,这时想要更改索引的mapping的话,最好删除当前索引库,重新建立索引库,设置 mapping 之后,将数据重新添加到索引库中。

    默认analyzer

    回到我们的例子, ES猜测description字段是string类型,于是默认创建一个string类型的mapping,它使用默认的全局analyzer, 默认的analyzer是标准analyzer, 这个标准analyzer有三个filter:token filter, lowercase filter和stop token filter。

    我们可以在做查询的时候键入_analyze关键字查看分析的过程

  • 相关阅读:
    [转]顶点数据压缩
    [转]将某个Qt4项目升级到Qt5遇到的问题
    「05」回归的诱惑:一文读懂线性回归
    AI漫谈:我们距离实现《庆余年》里的五竹叔机器人还有多远?
    “木兰”去哪儿了?被全国700所中小学引入的国产编程语言“木兰”,为何在官网删除了下载链接
    有哪些让人相见恨晚的Python库(一)
    2019年最值得关注的AI领域技术突破及未来展望
    为什么样本方差的分母是n-1?为什么它又叫做无偏估计?
    「04」机器学习、深度学习需要哪些数学知识?
    「03」机器学习、深度学习该怎样入门?
  • 原文地址:https://www.cnblogs.com/xiaozengzeng/p/12359311.html
Copyright © 2011-2022 走看看