es--基础--9.2--SpringBoot注解--Field--介绍

2023-10-30

es–基础–9.2–SpringBoot注解–Field–介绍


内容

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Documented
@Inherited
public @interface Field {
	@AliasFor("name")
	String value() default "";
	
	@AliasFor("value")
	String name() default "";
	
	# 自动检测属性的类型,可以根据实际情况自己设置
	FieldType type() default FieldType.Auto;
	
	# 是否建立索引
	boolean index() default true;
	
	# 时间类型的格式化
	DateFormat format() default DateFormat.none;
	
	String pattern() default "";
	
	# 默认情况下不存储原文
	boolean store() default false;
	
	boolean fielddata() default false;
	
	# 指定字段搜索时使用的分词器
	String searchAnalyzer() default "";
	
	# 指定字段搜索时使用的分词器
	String analyzer() default "";
	
	String normalizer() default "";
	
	# 如果某个字段需要被忽略
	String[] ignoreFields() default {};
	
	boolean includeInParent() default false;
	
	String[] copyTo() default {};
	
	int ignoreAbove() default -1;
	
	boolean coerce() default true;
	
	boolean docValues() default true;
	
	boolean ignoreMalformed() default false;
	
	IndexOptions indexOptions() default IndexOptions.none;
	
	boolean indexPhrases() default false;
	
	implemented as array to enable the empty default value
	
	IndexPrefixes[] indexPrefixes() default {};
	
	boolean norms() default true;
	
	String nullValue() default "";
	
	int positionIncrementGap() default -1;
	
	Similarity similarity() default Similarity.Default;
	
	TermVector termVector() default TermVector.none;
	
	double scalingFactor() default 1;
	
	int maxShingleSize() default -1;
	 
	
	boolean storeNullValue() default false;
	
	
	boolean positiveScoreImpact() default true;
	
	boolean enabled() default true;
	
	boolean eagerGlobalOrdinals() default false;
	
	NullValueType nullValueType() default NullValueType.String;

}

1、String value() default “”;

字段名称,是name的别名

2、String name() default “”;

字段名称

3、FieldType type() default FieldType.Auto;

  1. 字段类型
  2. 默认:自动检测字段的类型

4、boolean index() default true;

  1. 是否建立索引
  2. false:
    1. 不能查询
    2. 不能得到返回

5、DateFormat format() default DateFormat.none;

  1. 时间类型的格式化

6、String pattern() default “”;111

7、boolean store() default false;

  1. 是否存储原文
  2. false:字段内容 存储到_source中
  3. ture:字段内容 存储到其他地方,不存储到_source中

7.1、field是怎么存储的

  1. 当你将一个field的store属性设置为true,这个会在lucene层面处理。lucene是倒排索引,可以执行快速的全文检索,返回符合检索条件的文档id列表。
  2. 在全文索引之外,lucene也提供了存储字段的值的特性,以支持提供id的查询(根据id得到原始信息)。

7.2、_source(store=false)

  1. 会存储每一个文档的完整信息
  2. 好处
    1. 因为_source 是把所有字段保存为一份文档,命中后读取只需要一次 IO
  3. 坏处
    1. 查询的时候,是返回整个文档,因为_source 是把所有字段保存为一份文档,如果文档内容很大,是非常占用带宽的,通常我们也不需要 整个文档(可能只关心摘要),因为可能就查询几个字段,而store=ture,就是来解决这个问题的

7.3、store=ture

  1. 在 _source 存储之外再为这个字段独立进行存储
  2. 使用场景
    1. 针对内容比较多的字段
  3. 坏处
    1. 从每一个stored field中获取值都需要一次磁盘io,如果想获取多个field的值,就需要多次磁盘io,但是,如果从_source中获取多个field的值,则只 需要一次磁盘io,因为_source只是一个字段而已。所以在大多数情况下,从_source中获取是快速而高效的。
  4. 注意:
    1. 将 store 设置为 yes,一般来说还应该在 _source 排除 exclude 掉这个字段,这时候索引的字段,不会保存在 _source 里了,会独立存储一份,查询时 _source 里也没有这个字段了,但是还是可以通过指定返回字段来获取,但是会有额外的 IO 开销。
      1. _source 的读取 需要一次 IO
      2. field 字段的读取 需要一次 IO

7.4、match 和高亮

  1. store=ture:
    1. 可以 match
    2. 可以 高亮
  2. store=false,且_source 不存储:
    1. 数据 不会返回了
    2. 数据 不能高亮
    3. 可以 match

8、boolean fielddata() default false;

是否支持聚合查询

8.1、doc_values

  1. 支持排序,聚合,脚本等需求,以面向列的方式存储,对于排序和聚合来说更高效
  2. 对于text字段,doc_values是不支持的。除非使用fielddata

8.2、fielddata

  1. 这是一种把text字段放到内存中来处理的方式,先直接从磁盘读取每个段的反向索引,然后通过反向索引,反转索引与文档的关系,最后将结果放到JVM堆内存中来处理。
  2. 由于fielddata的机制,会占用大量堆空间,因此可能会造成频繁的FullGC,导致用户遇到延迟、卡顿等现象,这也是为什么fielddata默认为不开启的原因。
  3. 替代方案:keyword

9、String searchAnalyzer() default “”;

查询时,先对要查询的text类型的输入做分词,再去倒排索引中搜索。

10、String analyzer() default “”;

插入文档时,将text类型的字段做分词然后插入倒排索引。

11、String normalizer() default “”;

  1. normalizer:是keyword的一个属性,可以对 keyword 生成的 单一Term 再做进一步的处理。简单来说,就是对字段的内容进行处理。

11.1、“normalizer”: “lowercase”

  1. 文档写入时,所有的 term 都会被做小写处理,也就是说字段内容都小写后,再存储
  2. 查询时,如果参数是这个字段,那么 字段内容都小写后,再查询

12、String[] ignoreFields() default {};

  1. 某个字段需要被忽略
  2. 因为_source会存储每一个文档的完整信息,返回的时候会返回整个文档,使用ignoreFields,那么会忽略掉对应的字段。

13、boolean includeInParent() default false;

  1. 设置所有嵌套对象属性的include_in_parent值
  2. true:在嵌套对象中的所有字段会被添加到父文档的作为标准字段
  3. false:

13.1、举例

字段类型为nested类型时

"entity": [
    {
        "id": "1"  
        "name": "张三"
    },
    {
        "id": "2"
        "name": "李四"
    }
]                     

当字段类型为nested类型时,需要把entity字段的include_in_parent属性设置成true,例如:


"entity": {
    "type": "nested",
    "include_in_parent": true,    //默认为false
    "properties": {
        "id": {
            "type": "keyword"
        },
        "name": {
            "type": "text",
            "fields": {
                "completion": {
                    "type": "text",
                    "analyzer": "completion_analyzer"
                },
                "keyword": {
                    "type": "keyword"
                },
                "pinyin": {
                    "type": "text",
                    "analyzer": "full_pinyin_analyzer"
                }
            },
            "analyzer": "ik_max_word"
        }
    }
}

以下查询语句才会生效:

{
  "query": {
    "script": {
      "script": "doc['entity.id'].size() > 1"  //1代表的是数组长度
    }
  }
}


14、String[] copyTo() default {};

  1. 可以将多个字段的值复制到组字段中(F1),然后可以将其作为单个字段(F1)进行查询。
  2. F1:text类型
  3. 它是复制的字段值,而不是术语(由分析过程产生的)。
  4. _source不会修改 原始字段以显示复制的值。
  5. 可以将相同的值复制到多个字段中 “copy_to”: [ “field_1”, “field_2” ]

14.1、案例

PUT my_index
{
  "mappings": {
    "_doc": {
      "properties": {
        "first_name": {
          "type": "text",
          "copy_to": "full_name"
        },
        "last_name": {
          "type": "text",
          "copy_to": "full_name"
        },
        "full_name": {
          "type": "text"
        }
      }
    }
  }
}
 
PUT my_index/_doc/1
{
  "first_name": "John",
  "last_name": "Smith"
}
 

irst_name和last_name字段 的值将复制到 full_name字段中。

该first_name和last_name领域仍可以分别查询了第一个名字和姓氏,但full_name现场可以查询两个姓和名。

GET my_index/_search
{
  "query": {
    "match": {
      "full_name": {
        "query": "John Smith",
        "operator": "and"
      }
    }
  }
}

15、int ignoreAbove() default -1;

  1. 设置 字段值的最大长度
  2. 超出这个长度的字段将不会被索引,但是会存储。

16、boolean coerce() default true;

  1. 是否强制尝试清除脏值以适合字段的数据类型
  2. true:尝试清除脏值
  3. false:不清除脏值,那么请求的参数一定要符合字段类型的要求

16.1、介绍

数据并不总是干净的。根据它的生成方式,数字可能会在JSON正文中呈现为真正的JSON数字,例如5,但它也可能呈现为字符串,例如"5"。或者,应该是整数的数字可以替代地呈现为浮点,例如5.0,或甚至"5.0"。

改参数,就是设置 请求的参数是否一定要符合字段类型的要求。

16.2、案例

PUT my_index
{
  "mappings": {
    "_doc": {
      "properties": {
        "number_one": {
          "type": "integer"
        },
        "number_two": {
          "type": "integer",
          "coerce": false
        }
      }
    }
  }
}
 
PUT my_index/_doc/1
{
  "number_one": "10"
}
 
PUT my_index/_doc/2
{
  "number_two": "10"
}

  1. 文档1,改请求能够执行
  2. 文档2,改请求能够报错,因为规定number_two的值必须为integer,而不是字符串。

17、boolean docValues() default true;

  1. 倒排索引可以提供全文检索能力,但是无法提供对排序和数据聚合的支持。doc_values 本质上是一个序列化的列式存储结构,适用于聚合(aggregations)、排序(Sorting)、脚本(scripts access to field)等操作。
  2. 默认情况下,ES几乎会为所有类型的字段存储doc_value,但是 text 或 text_annotated 等可分词字段不支持 doc values 。
  3. 如果不需要对某个字段进行排序或者聚合,则可以关闭该字段的doc_value存储。
https://blog.csdn.net/a745233700/article/details/117915118

18、boolean ignoreMalformed() default false;

  1. 是否忽略字段格式类型
  2. false:不忽略,如果将错误的数据类型映射到字段中则会报错
  3. true:忽略,当你对数据类型不太确定时,可以尝试配置这个属性为true。

18.1、案例

创建一个索引,number_one和number_two两个属性都是integer类型的,但是number_one配置了 “ignore_malformed”: true


PUT my-index-000001
{
  "mappings": {
    "properties": {
      "number_one": {
        "type": "integer",
        "ignore_malformed": true
      },
      "number_two": {
        "type": "integer"
      }
    }
  }
}

number_one添加一条字符类型的数据,能够添加成功。

PUT my-index-000001/_doc/1
{
  "text":       "Some text value",
  "number_one": "foo" 
}

number_two添加一条字符类型的数据,则提示数据类型异常。

PUT my-index-000001/_doc/2
{
  "text":       "Some text value",
  "number_two": "foo" 
}


19、IndexOptions indexOptions() default IndexOptions.none;

  1. 用于控制添加到倒排索引中的信息,服务于搜索和高亮等目的。

19.1、包括以下参数

  1. docs: 只有文档编号被索引。能够回答的问题只有此 term(词条)是否存在于此字段。
  2. freqs:
    1. 文档编号和term(词条)的频率会被索引。
    2. term(词条)频率用于给搜索评分,重复出现的term(词条)评分将高于单个出现的term(词条)。
  3. positions:
    1. 文档编号、term frequencies(词条频率)和term(词条)位置(或顺序)将被索引。4
    2. Position被用于 proximity queries (邻近查询)和phrase queries(短语查询)。
  4. offsets:
    1. 文档编号、term(词条)频率,位置,起始和结尾字符偏移量(用于映射该 term (词条)到原始字符串)将被索引。
    2. Offset用于postings highlighter。
  5. 被分析器分析的字符串字段使用 **position **作为默认值,其他的字段使用 **docs **作为默认值。

20、boolean indexPhrases() default false;

  1. 主要将两个单词的组合索引到单独字段中,这样在进行精确的短语查询的时候会更有效。
  2. text 字段具有index_phrases选项,该选项索引2个,并且查询解析器会自动利用该选项来运行不带斜率的词组查询。如果您的用例涉及运行 大量短语查询,则可以大大加快查询速度。
  3. 提升 短语查询速度,但是要消耗更多磁盘空间

20.1、案例

20.1.1、创建索引

# index_phrases

PUT /my_index
{
  "mappings" : {
    "properties" : {
      "name" : {
        "type"          : "text",
        "index_phrases" : true,
        "fields" : {
          "normal" : {
            "type" : "text"
          }
        }
      }
    }
  }
}
 
# 插入
POST /my_index/_doc/1
{
  "name" : "this is a dog is dog is dog"
}

# 插入
POST /my_index/_doc/2
{
  "name" : "this is dog"
}

20.1.2、查询1

# 搜索, index_phrases 为 true
GET /my_index/_search
{
  "query" : {
    "match_phrase" : {
      "name" : "is dog"
    }
  }
}

结果

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 0.23594555,
    "hits" : [
      {
        "_index" : "my_index",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 0.23594555,
        "_source" : {
          "name" : "this is dog"
        }
      },
      {
        "_index" : "my_index",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.21681483,
        "_source" : {
          "name" : "this is a dog is dog is dog"
        }
      }
    ]
  }
}

20.1.3、查询2

# 搜索, index_phrases 为 false
GET /my_index/_search
{
  "query" : {
    "match_phrase" : {
      "name.normal" : "is dog"
    }
  }
}

结果

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 0.44793728,
    "hits" : [
      {
        "_index" : "my_index",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 0.44793728,
        "_source" : {
          "name" : "this is dog"
        }
      },
      {
        "_index" : "my_index",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.44455233,
        "_source" : {
          "name" : "this is a dog is dog is dog"
        }
      }
    ]
  }
}


21、NullValueType nullValueType() default NullValueType.String;

null值类型,有以下几个值

  1. String
  2. Integer
  3. Long
  4. Double

22、IndexPrefixes[] indexPrefixes() default {};

  1. 为字段值的前缀编制索引,以加快前缀搜索速度
  2. min_chars:前缀最小长度,>0,默认2(包含)
  3. max_chars:前缀最大长度,<20,默认5(包含)
PUT my_index
{
  "mappings": {
    "properties": {
      "full_name": {
        "type": "text",
        "index_prefixes": {
          "min_chars" : 1,
          "max_chars" : 10
        }
      }
    }
  }
}


23、boolean norms() default true;

  1. 是否禁用评分
    1. false:禁用
    2. true:不禁用
  2. 当计算得分的时候,是否需要把字段长度用作参数计算,尽管计算得分时把字段长度考虑在内可以提高得分的精确性,但这样会消耗大量的磁盘空间(每个文档的每个字段都会消耗一个字节,即使某些文档不包含这个字段)。因此,如果不需要计算字段的得分,你应该禁用该字段的norms
  3. 场景
    1. 在过滤和聚合字段上应该禁用
  4. 只有type 为 “text” 的字段, 才能设置 norms=true
  5. 只有type 为 “keyword” 类型的字段,才能设置 norms=false
PUT my_index/_mapping
{
  "properties": {
    "title": {
      "type": "text",
      "norms": false
    }
  }
}

24、String nullValue() default “”;

使用指定的值替换为null值,以便可以进行索引和搜索

25、int positionIncrementGap() default -1;

  1. 当该field类型是text,且value是一个数组的时候才会起作用,将在值之间添加"假gap"间隙,以防止大多数短语查询在值之间
  2. 正常情况下一个text输入field之前会进行analysis,一般会有ananlzyer分词,并且记录每个词的position,当一个filed的输入有多个values的时候,会填充虚假的gap,让不同的field之间的position加大。

25.1、案例

观察下面的analyze


# 插入数据
POST my_index/_analyze
{
  "analyzer": "standard",
  "text": ["want some","like bread"]
}




{
  "tokens" : [
    {
      "token" : "want",
      "start_offset" : 0,
      "end_offset" : 4,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "some",
      "start_offset" : 5,
      "end_offset" : 9,
      "type" : "<ALPHANUM>",
      "position" : 1
    },
    {
      "token" : "like",
      "start_offset" : 10,
      "end_offset" : 14,
      "type" : "<ALPHANUM>",
      "position" : 102
    },
    {
      "token" : "bread",
      "start_offset" : 15,
      "end_offset" : 20,
      "type" : "<ALPHANUM>",
      "position" : 103
    }
  ]
}



  1. 可以看到 like bread的position 一个是102,一个是103,这就说明中间加入了虚假的gap,因为中间的position实际上是没有值的。
  2. 这种操作主要是为了在进行phrase查询的时候出错,比如查询some like命中了该文档是不合理的

25.2、案例2

PUT my_index
{
  "mappings": {
    "properties": {
      "names": {
        "type": "text",
        "position_increment_gap": 0 
      }
    }
  }
}

PUT my_index/_doc/1
{
    "names": [ "John Abraham", "Lincoln Smith"]
}

GET my_index/_search
{
    "query": {
        "match_phrase": {
            "names": "Abraham Lincoln" 
        }
    }
}

该查询会将doc1召回,显然是不合理的

26、Similarity similarity() default Similarity.Default;

  1. 针对 text类型
  2. 为字段设置相似度计算模型
  3. 这个计算模型可以自定义,也可以使用es内置的
  4. es内置的相似度打分模型有3个
    1. BM25:es中默认的打分模型
    2. classic:es早起版本的打分模型,也是经典的打分模型
    3. boolean:只能判断是否命中,得分score就是query boost
PUT my_index
{
  "mappings": {
    "properties": {
      "default_field": { 
        "type": "text"
      },
      "boolean_sim_field": {
        "type": "text",
        "similarity": "boolean" 
      }
    }
  }
}


27、TermVector termVector() default TermVector.none;

  1. 针对 text类型
  2. term向量是针对字段数据进行了analysis处理后的产生的term的组合
  3. 存储 字段的词矢量(Term vectors)信息。包括:词、位置、偏移量、有效载荷
  4. 场景
    1. 一般情况下没有什么用,只是在快速高亮显示上又一些用处。
  5. 缺点
    1. 会使字段在索引中的存储翻倍,因为需要一个额外的list terms去维护。

27.1、term 包含了下面的内容

  1. 一个terms的list
  2. 每个term中的position(位置)
  3. 每个term在原始文档中的offset(偏移量)
  4. payload(有效载荷)信息

27.2、term_vector 的设置

  1. no: No term vectors are stored。 (default) 这个是默认值
  2. yes: Just the terms in the field are stored。
  3. with_positions: Terms and positions are stored。
  4. with_offsets: Terms and character offsets are stored。
  5. with_positions_offsets: Terms,positions,and character offsets are stored。
  6. with_positions_payloads: Terms,positions,and payloads are stored。
  7. with_positions_offsets_payloads: Terms,positions,offsets and payloads are stored。

27.3、term_vector 的设置

当我们使用term vectors API的时候可以查看一个文档中field的vector

27.3.1、创建索引和插入数据

# 创建索引
PUT my_index
{
  "mappings": {
    "properties": {
      "text": {
        "type":        "text",
        "term_vector": "with_positions_offsets"
      },
      "number":{
        "type": "text"
      }
    }
  }
}

# 插入数据
PUT my_index/_doc/1?refresh
{
  "text": "Quick brown fox",
  "number":"want app and want banana"
}


27.3.2、使用terms vectors api 查看field包含的terms

GET my_index/_termvectors/1?fields=number,text

返回


{
  "_index" : "my_index",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "found" : true,
  "took" : 0,
  "term_vectors" : {
    "text" : {
      "field_statistics" : {
        "sum_doc_freq" : 3,
        "doc_count" : 1,
        "sum_ttf" : 3
      },
      "terms" : {
        "brown" : {
          "term_freq" : 1,
          "tokens" : [ { "position" : 1, "start_offset" : 6, "end_offset" : 11}]
        },
        "fox" : {
          "term_freq" : 1,
          "tokens" : [ { "position" : 2, "start_offset" : 12, "end_offset" : 15}]
        },
        "quick" : {
          "term_freq" : 1,
          "tokens" : [ { "position" : 0, "start_offset" : 0, "end_offset" : 5}]
        }
      }
    },
    "number" : {
      "field_statistics" : {
        "sum_doc_freq" : 4,
        "doc_count" : 1,
        "sum_ttf" : 5
      },
      "terms" : {
        "and" : {
          "term_freq" : 1,
          "tokens" : [ { "position" : 2, "start_offset" : 9, "end_offset" : 12}]
        },
        "app" : {
          "term_freq" : 1,
          "tokens" : [ { "position" : 1, "start_offset" : 5, "end_offset" : 8}]
        },
        "banana" : {
          "term_freq" : 1,
          "tokens" : [ { "position" : 4, "start_offset" : 18, "end_offset" : 24}]
        },
        "want" : {
          "term_freq" : 2,
          "tokens" : [ { "position" : 0, "start_offset" : 0, "end_offset" : 4}, 
	             { "position" : 3, "start_offset" : 13, "end_offset" : 17}]
        }
      }
    }
  }
}
  1. 以上,可以看到文档的term vector信息,
  2. number字段没有设置保存term_vector,在使用api的时候依然能够查到,这是因为terms vector api的原理导致的,如果没有的话他会自己从index中进行计算得到数据

27.3.3、假如直接使用

GET my_index/_termvectors/1

这个只会获取默认已经存储的term vectors,那么就不会返回number的term vectors了。

使用

GET my_index/_termvectors/1?fields=number,text

会触发强制计算term vectors。

28、double scalingFactor() default 1;

  1. 使用缩放因子将浮点数据存储到整数
  2. scalingFactor 由 long 数据类型来支持。long 数据类型在 Lucene 里可以被更加有效地压缩,从而节省存储的空间。
  3. 举例:
    1. 定义 scalingFactor 为 100。这样我们的数据,比如 1.99 刚好可以在乘以 100 变为 199,从而成为一个整型数。

29、int maxShingleSize() default -1;

  1. 分词的深度

29.1、案例

如果你有文本 “foo bar baz” 并再次使用 in_shingle_size 为 2 且 max_shingle_size 为 3,则你将生成以下 token:

foo, foo bar, foo bar baz, bar, bar baz, baz

29.2、使用

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "shingle": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "shingle-filter"
          ]
        }
      },
      "filter": {
        "shingle-filter": {
          "type": "shingle",
          "min_shingle_size": 2,
          "max_shingle_size": 3,
          "output_unigrams": false
        }
      }
    }
  }
}

30、boolean storeNullValue() default false;

是否能存储null

31、boolean positiveScoreImpact() default true;

  1. 和排名功能查询相关
  2. 涉及字段类型
    1. rank_feature
    2. rank_features

32、boolean enabled() default true;

  1. 是否 创建倒排索引
    1. false:
      1. 不建立索引,仍然可以检索并在_source元数据中展示,谨慎使用,该状态无法修改。
      2. 不能被搜索
      3. 不能存储
    2. true:建立索引,可以对其进行获取,但是不会以任何方式对它的内容建立索引
  2. 可以对字段操作,也可以对索引操作
    1. 对索引操作,这样的话index的所有字段都是没有indexed的
  3. 使用场景
    1. 只能 应用于顶级映射和object类型下

32.1、举例1

PUT my_index
{
  "mappings": {
    "properties": {
      "user_id": {
        "type":  "keyword"
      },
      "last_updated": {
        "type": "date"
      },
      "session_data": { 
        "type": "object",
        "enabled": false
      }
    }
  }
}

PUT my_index/_doc/session_1
{
  "user_id": "kimchy",
  "session_data": { 
    "arbitrary_object": {
      "some_array": [ "foo", "bar", { "baz": 2 } ]
    }
  },
  "last_updated": "2015-12-06T18:20:22"
}

PUT my_index/_doc/session_2
{
  "user_id": "jpountz",
  "session_data": "none", 
  "last_updated": "2015-12-06T18:22:13"
}


GET my_index
返回
{
  "my_index" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "last_updated" : {
          "type" : "date"
        },
        "session_data" : {
          "type" : "object",
          "enabled" : false
        },
        "user_id" : {
          "type" : "keyword"
        }
      }
    }
}
  1. 禁用了session_data字段。
  2. 任何任意数据都可以传递到session_data字段,因为它将被完全忽略。会存在_source当中,不能被搜索,对应的mapping文件也不会有dynamic field加入
  3. session_data还将忽略非JSON对象的值。

33、boolean eagerGlobalOrdinals() default false;

  1. eagerGlobalOrdinals:是否渴望(eager)全局序号(Ordinals)
    1. 本质:是否启用聚合性能优化,启用的话,能提升高基数聚合性能。
    2. 适用场景:
      1. 高基数聚合
      2. 高基数聚合场景中的高基数含义:一个字段包含很大比例的唯一值。
  2. global ordinals 表示 全局序号,是一种数据结构,应用场景如下:
    1. 基于 keyword,ip 等字段的分桶聚合,包含:terms聚合、composite聚合 等。
    2. 基于 text 字段的分桶聚合(前提条件是:fielddata 开启)。
    3. 基于 父子文档 Join 类型的 has_child 查询和 父聚合。
  3. global ordinals 使用一个数值代表字段中的字符串值,然后为每一个数值分配一个 bucket(分桶)。
  4. 启用 eager_global_ordinals 时,会在刷新(refresh)分片时 构建全局序号。这将构建全局序号的成本从搜索阶段转移到了数据索引化(写入)阶段。
PUT /my‐index 
{ 
"mappings": {
 "properties": {
  "tags": { 
 	"type": "keyword",
  	"eager_global_ordinals": true
  } 
 } 
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

es--基础--9.2--SpringBoot注解--Field--介绍 的相关文章

  • ElasticSearch 映射对分组文档进行折叠/执行操作的结果

    有一个对话列表 每个对话都有一个消息列表 每条消息都有不同的字段和action场地 我们需要考虑到在对话的第一条消息中使用了动作A 在几条消息之后有使用的动作A 1过了一会儿A 1 1等等 有一个聊天机器人意图列表 对对话的消息操作进行分组
  • java程序有多少种结束方式?

    我知道使用 System exit 0 可以结束一个java程序 例如 如果我有一个JFrame窗口 它会关闭并结束程序 但我想知道还有多少其他方法 可以关闭它并结束程序 包括发生错误时 程序会被关闭 JFrame也会被关闭吗 添加到其他答
  • 使用 proguard 混淆文件名

    我正在使用 proguard 和 Android Studio 混淆我的 apk 当我反编译我的apk时 我可以看到很多文件 例如aaa java aab java ETC 但我项目中的所有文件都有原始名称 有没有办法混淆我的项目的文件名
  • 为什么在 10 个 Java 线程中递增一个数字不会得到 10 的值?

    我不明白 a 的值为0 为什么 a 不是10 那段代码的运行过程是怎样的 是否需要从Java内存模型来分析 这是我的测试代码 package com study concurrent demo import lombok extern sl
  • Java LostFocus 和 InputVerifier,按反向制表符顺序移动

    我有一个 GUI 应用程序 它使用 InputVerifier 在产生焦点之前检查文本字段的内容 这都是很正常的 然而 昨天发现了一个问题 这似乎是一个错误 但我在任何地方都找不到任何提及它的地方 在我将其报告为错误之前 我想我应该问 我在
  • 查看Java Agent修改的Java类的源代码

    我需要了解 Java 代理如何修改我的初始类 以便我能够理解代码的作用 build gradle configurations jar archiveName agent2 jar jar manifest attributes Prema
  • 我们可以有条件地声明 spring bean 吗?

    有没有一种方法可以有条件地声明 Spring bean 例如
  • 自定义列表字段点击事件

    我正在编写一个应用程序 其中我创建了用于显示列表视图的自定义列表字段 我的 CustomListField 包含连续的一个图像和文本 我正在通过单击列表字段行获取字段更改侦听器 但我也想将字段更改侦听器放在图像上 谁能告诉我我该怎么做 这是
  • 未装饰窗户的 Windows Snap 功能?

    有谁知道如何允许未装饰的窗户使用此功能 唯一的选择就是重新实施它 有任何想法吗 谢谢 可停靠可能是唯一的JToolBar http docs oracle com javase tutorial uiswing components too
  • 如何使用 Java 引用释放 Java Unsafe 内存?

    Java Unsafe 类允许您按如下方式为对象分配内存 但是使用此方法在完成后如何释放分配的内存 因为它不提供内存地址 Field f Unsafe class getDeclaredField theUnsafe Internal re
  • Java AES 256 加密

    我有下面的 java 代码来加密使用 64 个字符密钥的字符串 我的问题是这会是 AES 256 加密吗 String keyString C0BAE23DF8B51807B3E17D21925FADF273A70181E1D81B8EDE
  • JAXB - 忽略元素

    有什么方法可以忽略 Jaxb 解析中的元素吗 我有一个很大的 XML 文件 如果我可以忽略其中一个大而复杂的元素 那么它的解析速度可能会快很多 如果它根本无法验证元素内容并解析文档的其余部分 即使该元素不正确 那就更好了 例如 这应该只生成
  • 在 Spring 中为 @Pathvariable 添加类级别验证

    在发布这个问题之前 我已经做了很多研究并尝试了很多可用的解决方案 这是我陷入的棘手情况 我有一个 Spring 控制器 它有多个请求映射 它们都有 PathVariables 控制器如下所示 Controller EnableWebMvc
  • Mockito 和 Hamcrest:如何验证 Collection 参数的调用?

    我遇到了 Mockito 和 Hamcrest 的泛型问题 请假设以下界面 public interface Service void perform Collection
  • Android 认为我没有关闭数据库!为什么?

    我有一个 SQLiteDatabase 数据成员 我在 onCreate 中初始化它 并在 onPause onStop 和 onDestroy 中调用 close 它在 onResume 中重新初始化 它似乎运行得很好 但当我查看调试器时
  • UseCompressedOops JVM 标志有什么作用以及何时应该使用它?

    HotSpot JVM 标志是什么 XX UseCompressedOops我应该做什么以及什么时候使用它 在 64 位 Java 实例上使用它 与不使用它 时 我会看到什么样的性能和内存使用差异 去年大多数 HotSpot JVM 都默认
  • 数据库中的持久日期不等于检索日期

    我有一个具有 Date 属性的简单实体类 此属性对应于 MySQL 日期时间列 Entity public class Entity Column name start date Temporal TemporalType TIMESTAM
  • java实现excel价格、收益率函数[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 我所有的 java 应用程序现在都会抛出 java.awt.headlessException

    所以几天前我有几个工作Java应用程序使用Swing图书馆 JFrame尤其 他们都工作得很好 现在他们都抛出了这个异常 java awt headlessexception 我不知道是什么改变了也许我的Java版本不小心更新了 谢谢你尽你
  • Java 的“&&”与“&”运算符

    我使用的示例来自 Java Herbert Schildt 的完整参考文献 第 12 版 Java 是 14 他给出了以下 2 个示例 如果阻止 第一个是好的 第二个是错误的 因此发表评论 public class PatternMatch

随机推荐

  • 在Unity中使用OOP

    以Main Camera 为例 所有组件 Transform Camera Audio Listener Scirpts 在Unity中都是类 单击Play按钮时 这些组件都会成为内存中的对象 1 获取组件 使用GameObject类的Ge
  • Scala简介与安装

    目录 一 Scala简介 一 Scala概述 二 函数式编程 三 Scala特性 1 一切都是对象 2 一切都是函数 3 一切都是表达式 四 在线运行Scala 二 选择Scala版本 三 Windows上安装Scala 一 到Scala官
  • /var/run/yum.pid 已被锁定,PID 为 xxxx 的另一个程序正在运行的问题解决

    问题 解决 root localhost rm f var run yum pid
  • openGL阴影实现(软阴影)

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一 现实世界中的柔和阴影 二 生成柔和阴影 百分比邻近滤波 PCF 1 引入库 代码 运行效果 源码下载 前言 目前我们所展示的阴影生成方法都仅限于生成硬阴影 即带锐边的阴
  • R语言绘制箱线图并添加相关显著性

    箱线图 又称盒须图 通过绘制连续型变量的五数总括 即最小值 下四分位数 第25百分位数 中位数 第50百分位数 上四分位数 第75百分位数 以及最大值 描述了连续型变量 的分布 它主要用于反映原始数据分布的特征 还可以进行多组数据分布特征的
  • 网络爬虫CSS选择器详细讲解

    网络爬虫CSS选择器详细讲解 前言 使用步骤 1 解析的HTML代码 2 逐层选择节点 3 获取文本 string和get text 4 获取节点的属性值 5 选择单个和多个节点 6 通过class和id选择节点 class id 7 选择
  • PLY 模型文件简析

    PLY 模型文件简析 参考链接 wiki需要FFFQQQ TIPS 主要是一些英文的简析 但是一句话 网上讲的不清楚 特此说明property list uchar int vertex indices 应该是面的顶点数量使用 uchar
  • 苹果 / Apple iCloud 教育版 200GB 云盘账号自助注册教程

    因为教育机构的管理式 Apple ID 可以单点登录 SSO 登录 因此自助注册苹果 Apple iCloud 教育版 200GB 云盘账号就可以顺利进行了 自助注册苹果 Apple iCloud 教育版 200GB 云盘账号分为两步 自助
  • STM32速成笔记—IWDG

    文章目录 一 IWDG简介 二 STM32的IWDG 2 1 STM32的IWDG简介 2 2 喂狗 2 3 IWDG框图 三 IWDG配置步骤 四 IWDG配置程序 4 1 IWDG初始化程序 4 2 喂狗 五 应用实例 一 IWDG简介
  • 恶意代码的分类

    计算机病毒 注意这是狭义上的定义 和网络蠕虫都可以进行自我传播 那他们的本质区别是什么 计算机病毒 一组能进行自我传播 需要用户干预来触发执行的破坏性程序或代码 网络蠕虫 一组能进行自我传播 不需要用户干预即可触发执行的破坏性程序或代码 1
  • [007]爬虫系列

    一 找到首次加载的js 用源码面板打开 二 第一行打断点 格式化 三 刷新网页 成功断点 执行hook 代码如下 function use strict var cookieTemp Object defineProperty docume
  • 前端实现流程图效果_微前端在58商业的探索实践

    导读 商业FE部门分四个业务组 每个组内迭代着多个中后台应用 其中有跨组协作项目 这些项目的特点是UI UE相似 有较多的组件 逻辑复用场景 技术栈统一为VUE 且项目在不断迭代中 实践微前端架构能提高业务复用性 让各团队更高效的分治项目
  • npm,webpack学习中遇到的各种问题

    问题 打包的时候报错 Uncaught ReferenceError regeneratorRuntime is not defined 解决 详见babel plugin transform runtime babel pollyfill
  • Python字典操作方法--items()

    d items 返回字典中的所有键值对信息 返回结果是Python的一种内部数据类型dict items 如果希望更好的使用返回结果 可以将其转换为列表类型 键值对以元组类型 即括号形式 表示 gt gt gt d 2018 小明 2019
  • Flutter与Native通信原理剖析与实践

    通信原理 我们分几种场景来介绍Flutter和Native之间的通信 Native发送数据给Flutter Flutter发送数据给Native Flutter发送数据给Native 然后Native回传数据给Flutter Flutter
  • 系统服务器有哪几种,服务器的操作系统有哪几种

    服务器的操作系统有哪几种 内容精选 换一换 切换操作系统是为您的云服务器重新切换一个系统盘 切换完成后云服务器的系统盘ID会发生改变 并删除原有系统盘 如果云服务器当前使用的操作系统不能满足业务需求 如软件要求的操作系统版本较高 您可以选择
  • 【yarn】yarn RMContainer 状态机正常执行流程

    1 概述 上一篇文章 Yarn Yarn Service端如何处理客户端提交的任务 在上一篇文章中 我们知道服务器接收到客户端提交的任务之后 会启动多个状态机进行联合操作 最终来解决任务提交之后的全流程 多个状态机合作完成任务 然后我们看了
  • 工业相机SDK二次开发

    1 工业相机编程模型和流程 2 工业相机SDK接口使用总结 3 Basler Pylon工业相机SDK的使用 4 Pylon 以实时图像采集讲解PylonC SDK使用流程 5 关于使用维视工业相机 SDK 采集图像的问题 6 工业相机SD
  • 【快速上手系列】使用七牛云+webuploader实现对象云存储(OSS)

    快速上手系列 使用七牛云 webuploader实现对象云存储 OSS 步骤 一 七牛云配置 1 新建存储空间 进入七牛云 注册登录 进入控制台 选择对象存储 Kodo 选择空间管理 新建空间 免费30天 写好了之后点击确定 2 获取 Ac
  • es--基础--9.2--SpringBoot注解--Field--介绍

    es 基础 9 2 SpringBoot注解 Field 介绍 内容 Retention RetentionPolicy RUNTIME Target ElementType FIELD Documented Inherited publi