数据模式为文档,_doc格式数据,也就是json 数据
es根据_id查询数据
GET /index_name/_doc/document_id
es根据_id删除数据
DELETE /index_name/_doc/document_id
es查询mapping结构
GET /index_name/_mappings
es查询index下所有数据(突破10000条限制)
GET /index_name/_search
{
"query": {
"match_all": {}
},
"track_total_hits": true
}
es新建mapping映射
PUT /passdata
{
"mappings" : {
"properties" : {
"carId" : {
"type" : "keyword",
"index": true
},
"id" : {
"type" : "text",
"index": true
},
"name" : {
"type" : "text",
"index": true,
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"time" : {
"type" : "date"
},
"type" : {
"type" : "text",
"index": true,
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
}
}
}
}
6.0后字符串不用string;改成text和keyword两种了,keyword是默认不分词,text是要分词
这种结构保存字段会存两份索引(个人理解),首先第一个type text这个会进行分词建索引保存,再后面fields keyword会进行保存完整字符串附加。
所以一个articleID过来的时候,会建立两次索引。一次是自己本身(articleID),是要分词的,分词后放入倒排索引;另一次是基于articleID.keyword,不分词,最多保留256字符,直接一个完整的字符串放入倒排索引中。
text:
- 会分词,然后进行索引
- 支持模糊、精确查询
- 不支持聚合
- 分词器默认standard ,对于中文来说就是按字分词
- 支持fields属性,可以在fields中添加keyword子类型,以实现精确检索
keyword:
- 不进行分词,直接索引
- 支持模糊、精确查询
- 支持聚合
- 支持按字数建立索引,以便节约索引空间
- 看下text分词规律。
注意es 默认的分词是汉字为一个字一词,如果想用其他分词,引入ik分词。
es的sort 字段有的有有的没有,如果没有就排在最后
在Elasticsearch中,如果你想要在排序时将没有特定字段的文档放在最后,你可以使用missing
参数来定义一个默认值。对于时间字段time
,如果文档中没有这个字段,你可以设置一个非常早的时间或者一个特定的值,确保它总是被排序在最后。以下是一个如何使用missing
参数的例子,假设你的时间字段名为time
:
{
"sort": [
{
"time": {
"order": "asc",
"missing": "_last",
"unmapped_type": "date"
}
}
]
}
missing
设置为 _last
,这意味着如果文档中没有time
字段,它将被当作一个非常大的日期,从而在排序时被放置在最后。unmapped_type
设置为 date
是为了确保即使time
字段在文档中不存在,Elasticsearch也会按照日期类型来处理这个缺失值。
如果想要自定义一个特定的时间值来代替缺失的字段,可以将missing
设置为你想要的具体时间值:
{
"sort": [
{
"time": {
"order": "asc",
"missing": "2000-01-01T00:00:00",
"unmapped_type": "date"
}
}
]
}
所有没有time
字段的文档将在排序时被当作2000年的某个时间,并且因为它们被当作是在2000年之后,所以它们会被放置在排序的最后