ElasticSearch 常用字段类型

深入解析Elasticsearch 8.4.1:Mapping与字段类型实战指南 在Elasticsearch中,Mapping定义了索引中每个字段的类型、属性以及设置。Mapping的作用是告诉Elasticsearch如何索引文档中的字段,包括如何分析字段值以及如何存储它们。分词即使将文本拆分成单独的单次或词项的过程分词是搜索引擎在建立索引和执行查询时的关键步骤,将文本拆分成单词,并构建倒排索引,可以实现更好的搜索和检索效果。分词规则是指如何将文本进行拆分的规则和算法。elasticsearch使用一些列的分词器(analyzer)和标记器(tokenizer)来处理文本内容。 阅读详情

一、数据类型

1.1 核心数据类型

字符串型:text(分词)、keyword(不分词)

数值型:long、integer、short、byte、double、float、half_float、scaled_float

日期类型:date

布尔类型:boolean

二进制类型:binary

范围类型:integer_range、float_range、long_range、double_range、date_range

1.2 复杂数据类型

数组类型:array

对象类型:object

嵌套类型:nested object

1.3 地理位置数据类型

geo_point(点)、geo_shape(形状)

1.4 专用类型

记录IP地址ip

实现自动补全completion

记录分词数:token_count

记录字符串hash值murmur3

多字段特性multi-fields
 

ES常用的数据类型可分为3大类

  • 核⼼数据类型
  • 复杂数据类型
  • 专⽤数据类型

核心数据类型

(1)字符串

  • text  ⽤于全⽂索引,搜索时会自动使用分词器进⾏分词再匹配
  • keyword  不分词,搜索时需要匹配完整的值

(2)数值型

  • 整型: byte,short,integer,long
  • 浮点型: float, half_float, scaled_float,double

(3)日期类型

  • date

json没有date类型,插入|更新文档|字段时怎么表示date类型?

#mapping,将字段类型设置为date
"type" : "date" 


#插入|更新此字段的值时,有3种表示方式

#使用固定格式的字符串
"2020-04-18"、"2020/04/18 09:00:00"   

#值使用长整型的时间戳,1970-01-01 00:00:00,s
1610350870    

#值使用长整型的时间戳,ms
1641886870000

(4)范围型

integer_range, long_range, float_range,double_range,date_range

比如招聘要求年龄在[20, 40]上,mapping:

age_limit :{
 "type" : "integer_range"
}

插入|更新文档|字段时,值写成json对象的形式:

"age_limit" : {
 "gte" : 20,
 "lte" : 40
}

gt是大于,lt是小于,e是equals等于。

按此字段搜索时,值写常量:

"term" : {
 "age_limit" : 30
}

age_limit的区间包含了此值的文档都算是匹配。

(5)布尔

  • boolean     #true、false

(6)⼆进制

  • binary   会把值当做经过 base64 编码的字符串,默认不存储,且不可搜索

复杂数据类型

(1)对象

 

 

  • object

#定义mapping
"user" : {
    "type":"object"
}


#插入|更新字段的值,值写成json对象的形式
"user" : {
    "name":"chy",
    "age":12
}


#搜索时,字段名使用点号连接
"match":{
     "user.name":"chy"
 }

一个对象中可以嵌套对象。

(2)数组

#ES没有专门的数组类型,定义mapping,写成元素的类型
"arr" : {
    "type":"integer"
}


#插入|更新字段的值。元素可以是各种类型,但元素的类型要相同
"arr" : [1,3,4]

专用数据类型

 

 

  • ip

#定义mapping
"ip_address" : {
    "type":"ip"
}


#插入|更新字段的值,值写成字符串形式
"ip" : "192.168.1.1"


#搜索
"match":{
     "ip_address":"192.168.1.1"
 }


#ip在192.168.0.0 ~ 192.168.255.255上的文档都匹配
"match":{
     "ip_address":"192.168.0.0/16"
 }

二、 Mapping

2.1 手动创建

1)创建操作

PUT stu
{
  "mappings": {
    "_doc":{
      "properties":{
        "id":{
          "type":"keyword"
        },
        "name":{
          "type":"text"
        },
        "sex":{
          "type":"integer"
        },
        "birth":{
          "type":"date"
        }
      }
    }
  }
}
—————————————华丽分割符————————————————
###############对上面命令做个简单解释
PUT stu (stu类似于MySQL中的数据库名)
{
  "mappings": {	("mappings"可以理解为建表语句 create table关键字)
    "_doc":{		("_doc"相当于MySQL中表名)
      "properties":{	("properties"相当于建表语句中要指定字段及字段类型的关键字)"id":{           (" id "相当于具体某个字段)
          "type":"keyword"("type"相当于要指定字段类型的关键字,"keyword "相当于字段的具体类型)

        },
        "name":{
          "type":"text"
        },
        "sex":{
          "type":"integer"
        },
        "birth":{
          "type":"date"
        }
      }
    }
  }
}

2)创建文档

PUT stu/_doc/1001
{
  "id":"001",
  "name":"红红",
  "sex":0,
  "birth":"1999-01-01"
}

—————————————华丽分割符————————————————
###############对上面命令做个简单解释
PUT stu/_doc/1001  (相当于指定要插入到哪个库的哪个表的哪个id中,类似于hbase的rowkey)
{
  "id":"001",		(字段具体的值)
  "name":"红红",
  "sex":0,
  "birth":"1999-01-01"
}

3)查询

GET stu/_search
输出结果如下:
{
  "took" : 9,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,  (切片总数)
    "successful" : 
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {   (命中)
    "total" : 1, (命中总数一条)
    "max_score" : 1.0, (数据在里面存储的时候是有一个评分,这个评分是按照搜索的关键字跟文章的匹配度得来的,如果这个关键字在文章中出现频率较高,这个分数也相应的较大)
    "hits" : [
      {
        "_index" : "stu",
        "_type" : "_doc",
        "_id" : "1001",
        "_score" : 1.0,
        "_source" : {  (具体的数据)
          "id" : "001",
          "name" : "红红",
          "sex" : 0,
          "birth" : "1999-01-01"
        }
      }
    ]
  }
}

2.2 自动创建

ES可以自动识别文档字段类型,从而降低用户使用成本

1)直接插入文档

PUT stu1/_doc/1001
{
  "id":"002",
  "name":"绿绿",
  "sex":"male",
  "birth":"1999-01-02"
}

2)查看mapping

GET stu1/_mapping
输出结果如下:
{
  "stu1" : {
    "mappings" : {
      "_doc" : {
        "properties" : {
          "birth" : {
            "type" : "date"
          },
          "id" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "name" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "sex" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          }
        }
      }
    }
  }
}

birth自动识别为long类型,name识别为text类型

3)日期类型的自动识别

日期的自动识别可以自行配置日期格式,以满足各种需求。

(1)自定义日期识别格式

PUT my_index
{
  "mappings":{
    "_doc":{
      "dynamic_date_formats": ["yyyy-MM-dd","yyyy/MM/dd"]
    }
  }
}

(2)关闭日期自动识别

PUT my_index
{
  "mappings": {
    "_doc": {
      "date_detection": false
    }
  }
}

4)字符串是数字时,默认不会自动识别为整形,因为字符串中出现数字时完全合理的

Numeric_datection可以开启字符串中数字的自动识别
PUT my_index
{
  "mappings":{
    "doc":{
      "numeric_datection": true
    }
  }
}

三、IK分词器

3.1 为什么使用分词器

分词器主要应用在中文上,在ES中字符串类型有keyword和text两种。keyword默认不进行分词,而text是将每一个汉字拆开称为独立的词,这两种都是不适用于生产环境,所以我们需要有其他的分词器帮助我们完成这些事情,其中IK分词器是应用最为广泛的一个分词器。

1)keyword类型的分词

GET _analyze
{
  "keyword":"我是程序员"
}

结果展示(报错),因为keyword不支持分词

{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "Unknown parameter [keyword] in request body or parameter is of the wrong type[VALUE_STRING] "
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "Unknown parameter [keyword] in request body or parameter is of the wrong type[VALUE_STRING] "
  },
  "status": 400
}

2)text类型的分词

GET _analyze
{
  "text":"我是程序员"
}

结果展示:

{
  "tokens": [
    {
      "token": "我",
      "start_offset": 0,
      "end_offset": 1,
      "type": "<IDEOGRAPHIC>",
      "position": 0
    },
    {
      "token": "是",
      "start_offset": 1,
      "end_offset": 2,
      "type": "<IDEOGRAPHIC>",
      "position": 1
    },
    {
      "token": "程",
      "start_offset": 2,
      "end_offset": 3,
      "type": "<IDEOGRAPHIC>",
      "position": 2
    },
    {
      "token": "序",
      "start_offset": 3,
      "end_offset": 4,
      "type": "<IDEOGRAPHIC>",
      "position": 3
    },
    {
      "token": "员",
      "start_offset": 4,
      "end_offset": 5,
      "type": "<IDEOGRAPHIC>",
      "position": 4
    }
  ]
}

3.2 IK分词器安装

1)下载与安装的ES相对应的版本

2)解压elasticsearch-analysis-ik-6.6.0.zip,将解压后的IK文件夹拷贝到ES安装目录下的plugins目录下,并重命名文件夹为ik(什么名称都OK)

[hadoop@hadoop102 plugins]$ mkdir ik
[hadoop@hadoop102 software]$ unzip elasticsearch-analysis-ik-6.6.0.zip -d /opt/module/elasticsearch-6.6.0/plugins/ik/

3)分发分词器目录

[hadoop@hadoop102 elasticsearch-6.6.0]$ xsync plugins/

4)重新启动Elasticsearch,即可加载IK分词器

3.3 IK分词器测试

IK提供了两个分词算法ik_smart 和 ik_max_word,其中 ik_smart 为最少切分,ik_max_word为最细粒度划分。

1)最少划分ik_smart

GET _analyze
{
  "analyzer": "ik_smart",
  "text":"我是程序员"
}

结果展示

{
    "tokens" : [
        {
            "token" : "我",
            "start_offset" : 0,
            "end_offset" : 1,
            "type" : "CN_CHAR",
            "position" : 0
        },
        {
            "token" : "是",
            "start_offset" : 1,
            "end_offset" : 2,
            "type" : "CN_CHAR",
            "position" : 1
        },
        {
            "token" : "程序员",
            "start_offset" : 2,
            "end_offset" : 5,
            "type" : "CN_WORD",
            "position" : 2
        }
    ]
}

2)最细切分ik_max_word

GET _analyze
{
  "analyzer": "ik_max_word",
  "text":"我是程序员"
}
输出的结果为:
{
    "tokens" : [
        {
            "token" : "我",
            "start_offset" : 0,
            "end_offset" : 1,
            "type" : "CN_CHAR",
            "position" : 0
        },
        {
            "token" : "是",
            "start_offset" : 1,
            "end_offset" : 2,
            "type" : "CN_CHAR",
            "position" : 1
        },
        {
            "token" : "程序员",
            "start_offset" : 2,
            "end_offset" : 5,
            "type" : "CN_WORD",
            "position" : 2
        },
        {
            "token" : "程序",
            "start_offset" : 2,
            "end_offset" : 4,
            "type" : "CN_WORD",
            "position" : 3
        },
        {
            "token" : "员",
            "start_offset" : 4,
            "end_offset" : 5,
            "type" : "CN_CHAR",
            "position" : 4
        }
    ]
}

四、检索文档

向Elasticsearch增加数据

PUT student
{
  "mappings": {
    "_doc":{
      "properties":{
        "class_id":{
          "type":"keyword"
        },
        "stu_id":{
          "type":"keyword"
        },
        "name":{
          "type":"text"
        },
        "sex":{
          "type":"keyword"
        },
        "age":{
          "type":"integer"
        },
        "favo":{
          "type":"text",
          "analyzer":"ik_max_word"
        }
      }
    }
  }
}

PUT student/_doc/1001
{
  "class_id":"0821",
  "stu_id":"001",
  "name":"小花",
  "sex":"female",
  "age":18,
  "favo":"洗脚,海狗人参丸"
}

如果在关系型数据库Mysql中主键查询数据一般会执行下面的SQL语句

select * from student where id = 1001;

但在Elasticsearch中需要采用特殊的方式

# 协议方法 索引/类型/文档编号
GET student/_doc/1001

响应

{
        "_index" : "student",
        "_type" : "_doc",
        "_id" : "1001",
        "_score" : 1.0,
        "_source" : {
          "class_id" : "0821",
          "stu_id" : "001",
          "name" : "小花",
          "sex" : "male",
          "age" : 18,
          "favo" : "洗脚,海狗人参丸"
        }
      }

我们通过HTTP方法GET来检索文档,同样的,我们可以使用DELETE方法删除文档,使用HEAD方法检查某文档是否存在。如果想更新已存在的文档,我们只需再PUT一次。

4.1 元数据查询

GET _cat/indices
GET _cat/indices?v

在这里插入图片描述

4.2 全文档检索

如果在关系型数据库Mysql中查询所有数据一般会执行下面的SQL语句

select * from stu;

但在Elasticsearch中需要采用特殊的方式

# 协议方法 索引/类型/_search
GET stu/_search

响应内容不仅会告诉我们哪些文档被匹配到,而且这些文档内容完整的被包含在其中—我们在给用户展示搜索结果时需要用到的所有信息都有了。

4.3 字段全值匹配检索

如果在关系型数据库Mysql中查询多字段匹配数据(字段检索)
一般会执行下面的SQL语句

select * from student where sex= 'male';

但在Elasticsearch中需要采用特殊的方式,并且全值匹配会把查询条件当做一个整体来查。

GET student/_search
{
  "query": {
    "bool": {
      "filter": {
        "term": {
          "sex": "海狗人参丸"
        }
      }
    }
  }
}
查询结果: 
{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 0,
    "max_score" : null,
    "hits" : [ ]
  }
}


没有对应的查询条件,因为ik_max_word分词器会把“海狗人参丸”分成以下词组
{
  "tokens" : [
    {
      "token" : "海狗",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "人参",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "丸",
      "start_offset" : 4,
      "end_offset" : 5,
      "type" : "CN_CHAR",
      "position" : 2
    }
  ]
}
我们会发现并没有“海狗人参丸”这几个字组合起来的词,因此查不到。

4.4 字段分词匹配检索

分词匹配会按照检索条件将其分词后再去匹配

GET student/_search
{
  "query": {
    "match": {
      "favo": "海狗人参丸"
    }
  }
}

4.5 全值匹配和分词匹配结合使用

GET student/_search
{
  "query": {
    "bool": {
      "filter": {
        "term": {
          "sex": "male"
        }
      }
      , "must": [
        {
          "match": {
            "favo": "海狗人参丸"
          }
        }
      ]
    }
  }
}

4.6 字段模糊匹配检索

如果在关系型数据库Mysql中模糊查询多字段数据
一般会执行下面的SQL语句

select * from student where name like '%haha%'

但在Elasticsearch中需要采用特殊的方式,查询出所有文档字段值分词后包含"我是程序"的文档

GET  student/_search
{
  "query": {
    "fuzzy": {
       "sex": "fmale"
    }
  }
}

4.7 聚合检索

4.7.1 单聚合条件

聚合查询相当于MySQL中的group by
GET student/_search

{
  "aggs": {
    "groupByClass": {
      "terms": {
        "field": "class_id",
        "size": 10
      }
    }
  }
}

4.7.2 多聚合条件

此时这两个聚合条件相互之间是没有关联的,比如同班级下的学生和年龄最大的学生

GET student/_search
{
  "aggs": {
    "groupByClass": {
      "terms": {
        "field": "class_id",
        "size": 10
      }
    },
    "groupByAge":{
      "max": {
        "field": "age"
      }
    }
  }
}
查询结果:
  "aggregations" : {
    "groupByAge" : {
      "value" : 60.0
    },
    "groupByClass" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : "0821",
          "doc_count" : 5
        },
        {
          "key" : "0621",
          "doc_count" : 1
        }
      ]
    }
  }

4.7.3 聚合嵌套检索

此时这两个聚合条件相互之间是有关联的,比如同班级下年龄最大的学生

GET student/_search
{
  "aggs": {
    "groupByClass": {
      "terms": {
        "field": "class_id",
        "size": 10
      },
      "aggs": {
        "maxAge": {
          "max": {
            "field": "age"
          }
        }
      }
    }
  }
}
查询结果:
"aggregations" : {
    "groupByClass" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : "0821",
          "doc_count" : 5,
          "maxAge" : {
            "value" : 60.0
          }
        },
        {
          "key" : "0621",
          "doc_count" : 1,
          "maxAge" : {
            "value" : 23.0
          }
        }
      ]
    }
  }
### 4.8 分页检索
GET student/_search
{
  "from": 0, (从第几条开始)
  "size": 1	(显示几条)
}

如果想实现看某一页的内容,或者跳转到某一页显示出其内容,可以将from的值设置为((页面数-1)*size)

4.9 查询时请求体中的关键字含义

五、索引别名 _aliases

索引别名就像一个快捷方式或软连接,可以指向一个或多个索引,也可以给任何一个需要索引名的API来使用。别名带给我们极大的灵活性,允许我们做下面这些:

1)给多个索引分组 (例如, last_three_months)

2)给索引的一个子集创建视图

3)在运行的集群中可以无缝的从一个索引切换到另一个索引

5.1 创建索引别名

1)建索引时直接声明

PUT movie_index
{  
  "aliases": {
    "movie_chn_2020-query": {}
  }, 
  "mappings": {
    "movie_type":{
      "properties": {
        "id":{
          "type": "long"
        },
        "name":{
          "type": "text",
          "analyzer": "ik_smart"
        }
      }
    }
  }
}

2)为已存在的索引增加别名

POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "student",
        "alias": "student_query"
      }
    }
  ]
}

也可以通过加过滤条件缩小查询范围,建立一个子集视图

POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "student",
        "alias": "student-query",
        "filter": {
          "term": {
            "sex": "male"
          }
        }
      }
    }
  ]
}

5.2 查询别名

与使用普通索引没有区别

GET movie_chn_2020-query/_search

5.3 删除某个索引的别名

POST _aliases
{
  "actions": [
    {
      "remove": {
        "index": "test1",
        "alias": "alias1"
      }
    }
  ]
}

5.4 为某个别名进行无缝切换

POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "test1",
        "alias": "alias1"
      }
    },
      "remove": {
        "index": "test1",
        "alias": "alias2"
    }
  ]
}

4.5.5 查询别名列表

GET  _cat/aliases?v

六、索引模板

Index Template 索引模板,顾名思义,就是创建索引的模具,其中可以定义一系列规则来帮助我们构建符合特定业务需求的索引的mappings和 settings,通过使用 Index Template 可以让我们的索引具备可预知的一致性。

6.1 常见的场景: 分割索引

 分割索引就是根据时间间隔把一个业务索引切分成多个索引。比如把order_info 变成 order_info_20200101,order_info_20200102 …..

这样做的好处有两个:

结构变化的灵活性:因为elasticsearch不允许对数据结构进行修改。但是实际使用中索引的结构和配置难免变化,那么只要对下一个间隔的索引进行修改,原来的索引位置原状。这样就有了一定的灵活性。

查询范围优化:因为一般情况并不会查询全部时间周期的数据,那么通过切分索引,物理上减少了扫描数据的范围,也是对性能的优化。

6.2 创建模板

PUT _template/template_movie2020
{
  "index_patterns": ["movie_test*"],
  "aliases" : { 
    "{index}-query": {},
    "movie_test-query":{}
  },
  "mappings": { 
"_doc": {
      "properties": {
        "id": {
          "type": "keyword"
        },
        "movie_name": {
          "type": "text",
          "analyzer": "ik_smart"
        }
      }
    }
  }
}

其中 “index_patterns”: [“movie_test*”], 的含义就是凡是往movie_test开头的索引写入数据时,如果索引不存在,那么es会根据此模板自动建立索引。
在 “aliases” 中用{index}表示,获得真正的创建的索引名。

测试

POST movie_test_2020xxxx/_doc
{
  "id":"333",
  "name":"zhang3"
}

6.3 查看系统中已有的模板清单

GET  _cat/templates

6.4 查看某个模板详情

GET  _template/template_movie2020

或者

GET  _template/template_movie*

 

【ElasticSearch】各字段详解,案例演示 提示:ES 是“搜索引擎 + 列存分析”的混合体,所以决定你能做什么查询/排序/聚合,以及性能如何。 阅读详情

相关推荐

Elasticsearch搜索引擎

本篇博客系统地介绍了Elasticsearch 7.14.0在windows环境下安装、基本使用、Springboot集成Elasticsearch以及ELK搭建。

weixin_44490884的博客 1671

Elasticsearch--字段数据类型

字段数据类型 Elasticsearch支持一系列不同的数据类型来定义文档字段,分为核心数据、复杂数据、地理数据、专门数据类型。 核心数据: 字符串数据类型:string 数字型数据类型:long、integer、short、byte、double、float 日期型数据类型:date 布尔型数据类型:boolean 二进制数据类型:binary 复杂数据类型: 数组数据类型:不需要专门的类...

吴声子夜歌的博客 2093

Elasticsearch段合并的原理

自动刷新流程每秒会创建一个新的段(由动态配置参数refresh_interval决定),导致短时间内段数量暴增。而段数目太多会带来众多问题,包含但不限于如下几点。❑资源消耗:每一个段都会消耗文件句柄、内存和CPU运行周期。❑搜索变慢:每个搜索请求都必须轮流检查每个段,所以段越多,搜索也就越慢。Elasticsearch通过在后台进行段合并来解决上述问题。小段被合并到大段,这些大段再被合并到更大的段。段合并的时候会将那些旧的已删除文档从文件系统中清除。

batman 1684

Elasticsearch字段数据类型

ES文档的每个字段都至少有一个数据类型,此类型决定了字段值如何被存储以及检索。例如,字符串类型可以定义为text或者keyword,前者用于全文检索,会经过分词后索引;后者用于精准匹配,值会保持原样被索引。ES字段类型按族分组,同一族中的类型具有完全相同的搜索行为,但可能具有不同的空间使用或性能特征。

程序员小潘 3522

Elasticsearch的数据类型

Elasticsearch的数据类型

JustinMars的博客 1805

生产环境下oracle19c rac恢复节点2

现状:目前节点1数据库集群服务处于正常,节点2服务器由于系统故障无法恢复,确认系统重装。目标:不影响业务的情况下,重新把节点2添加回集群中。

sqlora的专栏 865

更新es里的字段_ElasticSearch 常用字段类型

ES常用的数据类型可分为3大类核⼼数据类型复杂数据类型专⽤数据类型核心数据类型(1)字符串text ⽤于全⽂索引,搜索时会自动使用分词器进⾏分词再匹配keyword 不分词,搜索时需要匹配完整的值(2)数值型整型: byte,short,integer,long浮点型: float, half_float, scaled_float,double(3)日期类型datejson没有date类型,插入...

weixin_42511602的博客 1235

相场断裂模型中的各向异性机制:从裂纹密度到驱动力的数值实现

断裂力学是研究材料在载荷作用下裂纹萌生与扩展规律的基础学科,其核心在于理解材料失效的能量准则与路径选择。传统方法通常预设裂纹路径,而相场断裂模型通过引入连续的相场变量,将裂纹模拟转化为一个能量最小化问题,能够自发预测裂纹的萌生、扩展与分叉,在工程失效分析中具有重要价值。当材料具有显著的方向依赖性时,如单晶、复合材料或轧制金属板,各向同性假设会失效,此时需引入各向异性机制。该机制的核心在于改造两个关键部分:一是裂纹密度函数,通过引入各向异性张量来定义不同方向上形成裂纹微结构的能量成本;二是临界能量释放率(断裂

weixin_31421613的博客 297

ElasticSearch常用字段类型

ElasticSearch属性大全 type ES常用的数据类型可分为3大类 核⼼数据类型 复杂数据类型 专⽤数据类型 核心数据类型 (1)字符串 text ⽤于全⽂索引,搜索时会自动使用分词器进⾏分词再匹配(可以指定ik分词器) 会分词,然后进行索引 支持模糊、精确查询 不支持聚合 keyword 不分词,搜索时需要匹配完整的值 不进行分词,直接索引 支持模糊、精确查询 支持聚合 需要分词使用text类型(不能使用聚合会报错),否则使用keyword类型。 注意: 当一个字段需要按照精确

weixin_45203607的博客 1786

网格自适应_Comsol案例解析17:自适应网格的使用

本期导读自适应网格细化有许多优势,比如可以不用对网格进行全局加密,增加计算精度,又会降低求解自由度。本期仍然以气泡上升案例为例,在两相流模块中使用自适应网格。【打开案例模型】【修改网格】适当让气泡边界加密,注意,曲率因子越小,曲线上的网格越密【添加自适应网格】使用默认的参数即可,这里的误差指示器用的是水平集phi。可以根据具体求解模型选择适当的自变量作为误差指示器。【口诀】默认的一般是最...

weixin_28726871的博客 5681

DSPF28335:从零到一,实战GPIO与外部中断的嵌入式系统交互设计

本文以德州仪器DSPF28335芯片为例,详细讲解了嵌入式系统中GPIO与外部中断(EXTI)的实战配置方法。通过一个完整的按键控制LED并触发ADC采样的项目,深入剖析了GPIO寄存器配置、三级中断机制(外设-PIE-CPU)以及中断服务函数编写的核心要点,帮助开发者掌握嵌入式交互设计的基石,并提供了关键的避坑指南与调试清单。

weixin_29169899的博客 115

ElasticSearch 常用字段类型

ES常用的数据类型可分为3大类 核⼼数据类型 复杂数据类型 专⽤数据类型 核心数据类型 (1)字符串 text ⽤于全⽂索引,搜索时会自动使用分词器进⾏分词再匹配 keyword 不分词,搜索时需要匹配完整的值 (2)数值型 整型:byte,short,integer,long 浮点型: float, half_float, scaled_float,...

chenhongyong 2371

双传声器法测量吸声材料的吸声系数(公式推导与解释)

在双传声器法中,通过测量两个位置的声压 p1和 p2​,可以分离出入射波和反射波的声压分量。双传声器法一般在阻抗管中进行,阻抗管的一端为平面波声源,另一端放置待测材料。两个传声器放置在靠近材料的阻抗管内,用于测量管道内的声压。双传声器法是一种常用于测量材料吸声系数的实验方法,通过在管道内使用两个传声器测量声波的入射和反射,来计算出材料的吸声系数。当测试样品较少时,测试时,需要交换两个传声器的位置,目的是为了相位校准。

m0_57407372的博客 1875

什么是倒排索引及 Elasticsearch 常用字段类型解析

在全文搜索引擎中,倒排索引是核心的数据结构,它通过从文档中提取关键词并建立关键词到文档的映射关系,实现了高效的文本检索。本文将详细介绍倒排索引的组成与作用,并结合 Elasticsearch,解析其索引、文档、字段等基本概念及常见字段类型。

小红的布丁的博客 1195

Matlab图像处理频域滤波实现——高斯低通、高通、带通带阻滤波器

如果你想要进一步了解更多的相关知识,

小嘤熊的博客 1万+

基于STM32的智能宠物喂食系统设计与实现(代码+PCB )

STM32;DHT11;本系统的软件程序基于Keil MDK-ARM V5集成开发环境进行编写和编译。Keil MDK是ARM公司官方推荐的嵌入式开发工具,支持ARM Cortex-M系列微控制器的程序开发,内置ARM C/C++编译器、调试器和仿真器,具有代码编辑、语法高亮、工程管理和在线调试等功能,是STM32开发领域应用最为广泛的IDE之一。

3254968421的博客 72

date类型_ElasticSearch 常用字段类型

ES常用的数据类型可分为3大类核⼼数据类型复杂数据类型专⽤数据类型核心数据类型(1)字符串text ⽤于全⽂索引,搜索时会自动使用分词器进⾏分词再匹配keyword 不分词,搜索时需要匹配完整的值(2)数值型整型: byte,short,integer,long浮点型: float, half_float, scaled_float,double(3)日期类型datejson没有date类型,插入...

weixin_39564036的博客 473

贝叶斯(Bayes)决策理论

在博文【模式识别PR和模式的概念】介绍了相关的模式识别与模式的概念。在本节描述所要讨论的问题之前,再提一下对于待识别的物理对象的描述问题。假设一个待识别的物理对象用其d个属性观察值描述,称之为d个特征,这组成一个d维的特征向量,而这d维待征所有可能的取值范围则组成了一个d维的特征空间。一般地,机器实现自动分类有两大类方法:一种是模板匹配方法,另一种是对特征空间划分为子空间(每类的势力范围)的方法。

松子茶的专栏 3万+

重生之我们在ES顶端相遇第5章-常用字段类型

手动设置字段类型为keywordPUT /test3"tags": {写入数据keyword其实就是字符串,输入什么,存储就是什么。与 keyword 相对的则是 text。在第三章,我们介绍了全文搜索 match 的用法。你可能会好奇,为啥默认写入的数据就可以使用全文搜索。因为当输入是无规则字符串时,字段类型就是 text。(别着急,默认的字段类型,一会我们就会详细介绍)手动设置字段类型为text# 先删除索引PUT /test3"tags": {

不能放弃治疗 1409

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

7.elasticsearch字段类型列表

1.本文总结自2.本文罗列了 elasticsearch常用的字段类型;

PacosonSWJTU的博客 5291

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ElasticSearch中常用的数据类型

使用动态映射时,无须指定字段的数据类型,Elasticshearch会自动根据字段内容来判断映射到哪个数据类型。使用静态映射时,需要在创建索引时,指定字段名称和映射的数据类型。Elasticsearch中通过映射来指定字段的数据类型,映射方式有2种,静态映射和动态映射。比如,插入’2024/4/14 12:12:12’格式的字符串,会将其动态映射到Date类型。用于存储结构化内容,该类型字段通常用于排序,聚合查询等。使用别名可以索引中的字段定义一个替代名称,搜索替代名称时,相当于搜索其原字段内容。

qq_42068856的博客 637

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Elasticsearch——索引数据

索引映射(mapping)结构的定义方法,常用的各种字段类型和动态映射的使用。 使用Elasticsearch的REST端点完成对索引数据的增删改查。 索引数据的路由规则,根据索引数据默认的路由策略实现手动使用路由规则控制数据写入分片。 索引别名(aliases)的使用方法,包括如何将别名与数据过滤和数据路由配合使用来获得索引数据。 使用滚动索引(rollover index)将属于一个索引的数据分发到新的索引中,避免数据在一个索引中写入得太多。 索引数据的状态管理

码说芯语的博客 2938

Elasticsearch搜索引擎:ES的segment段合并原理

一、segment文件的合并流程: 当我们往 ElasticSearch 写入数据时,数据是先写入 memory buffer,然后定时(默认每隔1s)将 memory buffer 中的数据写入一个新的 segment 文件中,并进入 Filesystem cache(同时清空 memory buffer),这个过程就叫做 refresh;每个 Segment 事实上是一些倒排索引的集合, 只有经历了 refresh 操作之后,数据才能变成可检索的。 ElasticSearch 每次 refresh

张维鹏的博客 2万+

详解最热门搜索引擎——ES

一、产生背景 ​ 互联网发展早期的时候,对于一般的公司储存的数据量不是那么的大,所以很多公司更倾向于使用数据库去存储和查询数据,如:现在去MySQL中查询数据,大概的查询方式就是:select * from table where filed like “%XXX%”或者其他方式,但是,如果我们在查询的时候没有用到或命中数据库建立的索引话,则会扫描整张表,即便是MySQL做过单表查询能力优化,但是他的极限也只在400万左右,且还会经常出现超时现象,让后为了解决这些问题,。很多公司就开始对数据库进

会编程的小郑 1万+

Linux安装elasticsearch搜索引擎并配置

`-v es-plugins:/usr/share/elasticsearch/plugins`:挂载逻辑卷,绑定es的插件目录。- `-v es-data:/usr/share/elasticsearch/data`:挂载逻辑卷,绑定es的数据目录。- `-v es-logs:/usr/share/elasticsearch/logs`:挂载逻辑卷,绑定es的日志目录。- `--network es-net` :加入一个名为es-net的网络中,与elasticsearch在同一个网络中。

m0_74939895的博客 1833

Elasticsearch ES 数据模型

Elasticsearch使用文档(Document)作为数据存储的基本单元,每个文档实际上是一条JSON格式的数据,它包含了一组键值对(字段和值)。文档是 Elasticsearch 索引中的一条记录,而索引是文档集合的容器。每个文档都会被分配一个ID,且文档的所有字段和数据都以JSON格式存储。与传统关系型数据库中的行不同,Elasticsearch中的文档不需要预先定义固定的表结构。在Elasticsearch中,映射定义可以在创建索引时指定,也可以在索引创建后动态地进行调整(但有一定的限制)。

Flying_Fish_roe的博客 1943
上一篇: 内存映射文件原理探索
下一篇: Elasticsearch简介及架构介绍
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值