标签:tag 指定 last nbsp 分析 提升 app china ppi
概念:自动或手动为index中的_doc建立的一种数据结构和相关配置,简称为mapping映射。
动态映射:dynamic mapping,自动为我们建立index,以及对应的mapping,mapping中包含了每个field对应的数据类型,以及如何分词等设置。
我们当然也可以手动在创建数据之前,先创建index,以及对应的mapping
语法:
GET /INDEX/_mapping
GET /book/_mapping查询结果:
{
"book" : {
"mappings" : {
"properties" : {
"description" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"name" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"pic" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"price" : {
"type" : "float"
},
"studymodel" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"tags" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"timestamp" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
}
搜索:
GET /website/_search?q=2019 0条结果 GET /website/_search?q=2019-01-01 1条结果 GET /website/_search?q=post_date:2019-01-01 1条结果 GET /website/_search?q=post_date:2019 0 条结果
搜索结果为什么不一致,因为es自动建立mapping的时候,设置了不同的field不同的data type。不同的data type的分词、搜索等行为是不一样的。所以出现了_all field和post_date field的搜索表现完全不一样。
exact value 精确匹配:2019-01-01,exact value,搜索的时候,必须输入2019-01-01,才能搜索出来,如果你输入一个01,是搜索不出来的
full text 全文检索:
2019-01-01,2019 01 01,搜索2019,或者01,都可以搜索出来
china,搜索cn,也可以将china搜索出来
likes,搜索like,也可以将likes搜索出来
like,搜索love,同义词,也可以将like搜索出来
就不是说单纯的只是匹配完整的一个值,而是可以对值进行拆分词语后(分词)进行匹配,也可以通过缩写、时态、大小写、同义词等进行匹配。深入 NPL,自然语义处理。
作用:切分词语,normalization(提升recall召回率),给你一段句子,然后将这段句子拆分成一个一个的单个的单词,同时对每个单词进行normalization(时态转换,单复数转换)。
测试分词器:
GET /_analyze
{
"analyzer": "standard",
"text": "Text to analyze 80"
}
分词结果:

token:实际存储的tern关键字
position:在此词条在原文本中的位置
start_offset/end_offset:字符在原始字符串中的位置
PUT book/_mapping
{
"properties": {
"name": {
"type": "text"
},
"description": {
"type": "text",
"analyzer":"english",
"search_analyzer":"english"
},
"pic":{
"type":"text",
"index":false
},
"studymodel":{
"type":"text"
}
}
}
Text文本类型:
1)analyzer :通过analyzer属性指定分词器。
2)index :index属性指定是否索引,默认为true,但是有一些内容不需要索引。
3)store :是否在source之外存储
keyword关键字字段:
目前已经取代了"index": false。上边介绍的text文本字段在映射时要设置分词器,keyword字段为关键字字段,通常搜索keyword是按照整体搜索,所以创建keyword字段的索引时是不进行分词的,比如:邮政编码、手机号码、身份证等。keyword字段通常用于过虑、排序、聚合等。
date日期类型:
日期类型不用设置分词器。
通常日期类型的字段用于排序。
通过format设置日期格式
"timestamp": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd"
}
只能创建index时手动建立mapping,或者新增field mapping,但是不能update field mapping。
PUT /book/_mapping/
{
"properties" : {
"new_field" : {
"type" : "text",
"index": "false"
}
}
}
通过删除索引来删除映射。
标签:tag 指定 last nbsp 分析 提升 app china ppi
原文地址:https://www.cnblogs.com/wwjj4811/p/13072290.html