本文目录
1 创建索引(Index)
2 修改索引
3 查询
4 相关文章
PUT /
{
"settings":{
...
},
"mappings":{
...
},
"aliases":{
...
}
}
1.1 Settings
"settings":{
"number_of_shards":5,
"number_of_replicas":1,
"analysis":{
"analyzer":{
"[analyzer_name]":{
"type":"...",
"filter":[],
"tokenizer":"..."
}
},
"tokenizer":{
"[tokenizer_name]":{
"type":"...",
"token_chars":[]
}
}
}
}
说明:
number_of_shards: 集群分片数量(默认5)
number_of_replicas: 副本数量(默认1)
analysis: 分析器设置
1.2 Mappings
详见《ElasticSearch 学习笔记:Mapping》
1.3 Aliases
"aliases":{
"":{}
}
说明:设置索引别名,可通过别名对索引进行查询等操作。
建议:
由于ES索引大部分内容一旦创建成功,则无法修改,只能通过删除并重建来达到变更的目标。
因此,建议索引名称增加版本号(例如:demo-index-v1),同时,为索引创建别名(例如:demo-index)。
在程序中,统一使用别名对索引进行访问,当索引发生变动时,无需修改程序代码,仅需要创建新索引(例如:demo-index-v2),导入旧索引数据,并将旧索引别名迁至新索引即可。
2.1 新增字段
PUT //_mappings//
{
"properties":{
...
}
}
说明:properties 参考 1.2 Mappings 中的properties内容。
2.2 新增分析器(Analysis)
POST //_close
PUT //_settings
{
"analysis": {
...
}
}
POST //_open
说明:新增分析器,需要先关闭索引,然后再添加分析器,最后重新打开索引。
3.1 Bool
{
"bool" : {
"filter" : [],
"must" : [],
"must_not" : [],
"should" : [],
"minumum_should_match" : 1
}
}
说明:用于组合复杂的过滤或查询条件。
注意事项:
若不存在 filter 或 must 语句,should 语句中的条件至少需要满足一个;
若存在 filter 或 must 语句,需要通过 minimum_should_match 参数设置 should 语句中的条件至少需要满足几个。
3.2 Search After(深度分页)
通过 from 进行分页查询时,在深度分页情况下(查询页数很大),效率很低。
例如:当 from = 2000 且 size = 20 时,实际在各分片上都需要查询前2020个文档,然后再汇总到一起,取出汇总排序结果中的第2000-2019个文档,查询效率低下。
为了解决深度分页问题,ES提供了 search_after 查询关键字。每次分页查询,仅需提供上一分页查询中最后一项的排序字段值,即可实现分页查询,例如:
{
"query":{
"match_all":{
}
},
"sort":[
{
"_score":{
"order":"desc"
}
},
{
"uid":{
"order":"asc"
}
}
],
"size":20,
"search_after":[
22.73906,
123456789
]
}
说明:通过 search_after 关键词分页查询,实际在各分片中,将直接根据上一项值,查询到各分片的下一页数据,然后只需要汇总各分片下一页数据(数量由 size 决定)并排序,根据最终排序返回结果。
注意事项:
search_after 指定的值的所属字段,必须与 sort 顺序一致。
例如,实例中,第一个必须是 _score 的值( 22.73906 ),第二个必须是 uid 的值(123456789)。
3.3 Profile
{
"profile":true,
"query":{
...
},
...
}
说明:设置profile=true,在查询结果中,会包含各分片节点执行查询过程的详细数据,比如条件拆分情况、执行耗时情况等。
3.4 Highlighting
"highlight":{
"pre_tags":[""],
"post_tags":[" "],
"fields":{
"":{
"fragment_size":150,
"number_of_fragments":3,
"highlight_query": {
...
}
},
...
}
}
说明:在匹配查询中,通过highlighting设置,可在返回结果中,增加命中关键词的相关信息。
例如:可以通过 pre_tags 和 post_tags 在命中的关键词前后增加一些标签,示例结果如下:
{
"_index":"demo-index-v1",
"_type":"doc",
"_id":"123456789",
"_score":22.73906,
"_source":{
"uid":123456789,
"uname":"Test_User",
"intro":null,
"deleted":false
},
"highlight":{
"uname":[
"T e s t _User"
]
}
}
《ElasticSearch 学习笔记:Mapping》
《ElasticSearch 学习笔记:Multi Search》
《ElasticSearch 学习笔记:Reindex》
《ElasticSearch 学习笔记:聚合(Aggregation) - Top Hits》