这里写目录标题
- 一、介绍
- 二、动态mapping
- 三、mapping属性
-
- (1)analyzer(分析器)
- [(2) coerce(强制类型转换)](#(2) coerce(强制类型转换))
- (3)copy_to(合并参数)
一、介绍
二、动态mapping
三、mapping属性
(1)analyzer(分析器)
该analyzer参数指定在索引或搜索字段时用于 文本分析的分析器。text除非使用映射参数覆盖search_analyzer,否则此分析器将用于索引和搜索分析。
- search_quote_analyzer
该search_quote_analyzer设置允许您指定短语分析器,这在处理禁用短语查询的停用词时特别有用。要禁用短语的停用词,需要一个利用三个分析器设置的字段:- analyzer设置索引所有词,包括停止词。
- search_analyzer设置将删除停止词的非短语查询。
- search_quote_analyzer设置不删除停止词的短语查询。
具体的介绍可参考:https://blog.csdn.net/ctwy291314/article/details/81391514
说明:只有text字段支持analyzer映射参数。
(2) coerce(强制类型转换)
数据不总是干净的.根据它的生成方式,一个数字可能会在 JSON body中呈现为一个真正的 JSON 数字。例如5,但它也可能呈现为字符串,例如 "5" 。或者,应该是整型的数字被替代地呈现为浮点型.例如, 5.0 或者"5.0".
Coercion尝试着清理脏数据让字段符合相应的数据类型.例如 :
- 字符串被强制转换为数字。
- 浮点型被截断为整型。
例如:
c
curl -XPUT 'localhost:9200/my_index?pretty' -H 'Content-Type: application/json' -d'
{
"mappings": {
"my_type": {
"properties": {
"number_one": {
"type": "integer"
},
"number_two": {
"type": "integer",
"coerce": false
}
}
}
}
}
'
curl -XPUT 'localhost:9200/my_index/my_type/1?pretty' -H 'Content-Type: application/json' -d'
{
"number_one": "10" # 1
}
'
curl -XPUT 'localhost:9200/my_index/my_type/2?pretty' -H 'Content-Type: application/json' -d'
{
"number_two": "10" # 2
}
'
- number_one 字段会包含整型 10。
- 由于强制功能已被禁用,因此该文件将被拒绝。
(3)copy_to(合并参数)
copy_to参数允许你创建自定义的 _all 字段.换句换来说,可以将多个字段的值复制到group field(组字段),然后可以作为单个字段进行查询.例如, first_name和 last_name可以复制到 full_name字段中,如下所示 :
c
curl -XPUT 'localhost:9200/my_index?pretty' -H 'Content-Type: application/json' -d'
{
"mappings": {
"my_type": {
"properties": {
"first_name": {
"type": "text",
"copy_to": "full_name" # 1
},
"last_name": {
"type": "text",
"copy_to": "full_name" # 2
},
"full_name": {
"type": "text"
}
}
}
}
}
'
curl -XPUT 'localhost:9200/my_index/my_type/1?pretty' -H 'Content-Type: application/json' -d'
{
"first_name": "John",
"last_name": "Smith"
}
'
curl -XGET 'localhost:9200/my_index/_search?pretty' -H 'Content-Type: application/json' -d'
{
"query": {
"match": {
"full_name": { # 3
"query": "John Smith",
"operator": "and"
}
}
}
}
'
- 1 , 2 - 》first_name(名字)和 last_name(姓氏)字段复制到full_name 字段。
- 3 -》first_name(名字)和last_name(姓氏)字段仍然可以分别查询,full_name可以通过first_name(名字)和last_name(姓氏)来查询。
查看数据:
c
GET /my_index/my_type/_search
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "my_index",
"_type": "my_type",
"_id": "1",
"_score": 1,
"_source": {
"first_name": "John",
"last_name": "Smith"
}
}
]
}
}
一些要点:
- 复制的是字段值,而不是 term(词条)(由分析过程产生)。
- _source字段不会被修改来显示复制的值.。
- 相同的值可以复制到多个字段,通过"copy_to": [ "field_1", "field_2" ] 来操作。