text ⽤于全⽂索引,搜索时会自动使用分词器进⾏分词再匹配(可以指定ik分词器)
会分词,然后进行索引
支持模糊、精确查询
不支持聚合
*
keyword 不分词,搜索时需要匹配完整的值
不进行分词,直接索引
支持模糊、精确查询
支持聚合
需要分词使用text类型(不能使用聚合会报错
),否则使用keyword类型。
注意: 当一个字段需要按照精确值进行过滤、排序、聚合等操作时, 就应该使用keyword类型.keyword的内容不会被分词, 可以设置是否需要存储: “index”: “true|false”.
一定要注意这个配置,一旦设置了text那么之后就无法使用聚合
了,
主要还是看公司,对ES的理解,如果ES当做数据库的话那么尽量就别使用text,因为一旦业务复杂的话需要用到聚合就完蛋了.
如果公司只是拿ES做搜索的话基本上只要是字符串类型的都是使用text然后加ik分词器
long:有符号64-bit integer:-2^63 ~ 2^63 - 1
integer:有符号32-bit integer,-2^31 ~ 2^31 - 1
short:有符号16-bit integer,-32768 ~ 32767
byte: 有符号8-bit integer,-128 ~ 127
double:64-bit IEEE 754 浮点数
float:32-bit IEEE 754 浮点数
half_float:16-bit IEEE 754 浮点数
scaled_float
mapping,将字段类型设置为date “type” : “date”
/#插入|更新此字段的值时,有3种表示方式
/#使用固定格式的字符串 “2020-04-18”、“2020/04/18 09:00:00”
/#值使用长整型的时间戳,(s) 1610350870
/#值使用长整型的时间戳,(ms) 1641886870000
"properties": {
"time": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis",
"index": true
}
}
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html 官方的时间格式化大全
age_limit :{
“type” : “integer_range”
}
插入|更新文档|字段时,值写成json对象的形式:
“age_limit” : {
“gte” : 20,
“lte” : 40
}
gt是大于,lt是小于,e是equals等于
age_limit的区间包含了此值的文档都算是匹配。
按此字段搜索时,值写常量:
“term” : {
“age_limit” : 30
}
“user” : {
“type”:“object”
}
/#插入|更新字段的值,值写成json对象的形式
“user” : {
“name”:“chy”, “age”:12
}
提示: 一个对象中可以嵌套对象
/#搜索时,字段名使用点号连接
“match”:{
“user.name”:“chy”
}
字符串数组 [ “one”, “two” ]
整数数组 [ 1, 2 ]
数组的数组 [ 1, [ 2, 3 ]],相当于 [ 1, 2, 3 ]
Object对象数组 [ { “name”: “Mary”, “age”: 12 }, { “name”: “John”, “age”: 10 }]
同一个数组只能存同类型的数据,不能混存,譬如 [ 10, “some string” ] 是错误的
数组中的 null 值将被 null_value 属性设置的值代替或者被忽略
空数组 [] 被当做 missing field 处理
/#ES没有专门的数组类型,定义mapping,写成元素的类型
“arr” : {
“type”:“integer”
}
/#插入|更新字段的值。元素可以是各种类型,但元素的类型要相同
“arr” : [1,3,4]
nested 类型是一种对象类型的特殊版本,它允许索引对象数组,独立地索引每个对象
/#定义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”
}
地理位置,其值可以有如下四中表现形式:
object对象:“location”: {“lat”: 41.12, “lon”: -71.34}
字符串:“location”: “41.12,-71.34”
geohash:“location”: “drm3btev3e86”
数组:“location”: [ -71.34, 41.12 ]
查询和插入都使用一样的分词器
"like":{
"type":"text",
"analyzer": "ik_max_word",
"index": true
}
查询和插入分别使用不同的分词器 (如果查询压力比较大的话可以将查询使用最少切分)
"like":{
"type":"text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart",
"index": true
}
Mapping中的字段类型一旦设定后,禁止直接修改,原因是:Lucene实现的倒排索引生成后不允许修改
只能新建一个索引,然后reindex数据
默认允许新增字段
通过dynamic参数来控制字段的新增:
true(默认)允许自动新增字段
false 不允许自动新增字段,但是文档可以正常写入,但无法对新增字段进行查询等操作
strict 文档不能写入,报错
由于JSON没有date类型,Elasticsearch预先通过format参数定义时间格式,将匹配的字符串识别为date类型,转换为时间戳(单位:毫秒)
*
format默认为:strict_date_optional_time||epoch_millis
*
Elasticsearch内建的时间格式:
上述名称如果加前缀 strict_
表示为严格格式
*
更多的查看文档
用于_doc,object和nested类型的字段定义子字段
{
"mappings": {
"_doc": {
"properties": {
"manager": {
"properties": {
"age": { "type": "integer" },
"name": { "type": "text" }
}
},
"employees": {
"type": "nested",
"properties": {
"age": { "type": "integer" },
"name": { "type": "text" }
}
}
}
}
}
}
与 proximity queries(近似查询)和 phrase queries(短语查询)有关
*
默认值 100
*
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_45203607/article/details/120234715
内容来源于网络,如有侵权,请联系作者删除!