基本概念
索引:
类似于MySQL的表。索引的结构为全文搜索作准备,不存储原始的数据。
索引可以做分布式。每一个索引有一个或者多个分片 shard。每一个分片可以有多个副本 replica。
文档:
类似与MySQL的一行记录。
映射:
所有文档写入索引之前,会进行分析, 分析将输入的文本进行分割为词条,分析哪些词条会被过滤。
文档类型:
每个文档都可以有不同的结构。
不同的文档类不能为相同的属性设置不同的类型。
【同一索引中所有文档类型中,一个title字段必须是相同的类型】
RestFul API 操作索引
1 创建索引
PUT:127.0.0.1:9200/test
{
"settings": {
"index": {
"number_of_shards": "2",
"number_of_replicas": "0"
}
}
}
2 删除索引
DELETE:127.0.0.1:9200/test
RestFul API 操作文档
1、添加数据
POST:/{索引}/{类型}/{id 非必需}
# 指定数据的唯一标示符
POST:127.0.0.1:9200/test/user/1001
{
"id": 1010,
"name": "张三",
"age": 10,
"sex": "男"
}
# 不指定数据的唯一标示符
POST:127.0.0.1:9200/test/user
{
"id": 1011,
"name": "张三",
"age": 11,
"sex": "男"
}
2、删除数据
DELETE:127.0.0.1:9200/test/user/1001
说明:
删除一个文档的时候不会立即从磁盘上移除,它只是被标记为已删除。
Elasticsearch 将会在以后添加更多索引的时候才会在后台进行删除内容的清理。
3、更新数据
在 Elasticsearch中,文档数据是不能被修改的,但是可以通过指定唯一标示符的方式进行覆盖更新【全量覆盖】
PUT:127.0.0.1:9200/test/user/1001
{
"id": 1010,
"name": "张三",
"age": 11,
"sex": "男"
}
【局部更新】
1、从旧文档中检索到JSON
2、修改
3、删除旧文档
4、索引新文档
POST:127.0.0.1:9200/test/user/1001/_update
{
"doc":{
"age": 100
}
}
4、查询数据
根据ID搜索数据【GET】127.0.0.1:9200/test/user/1001
获取所有数据默认10条【GET】127.0.0.1:9200/test/user/_search
根据关键词搜索数据【GET】127.0.0.1:9200/test/user/_search?q=age:100
5、DSL搜索
Elasticsearch提供的丰富的灵活的查询语言叫做DSL查询【Query DSL】
POST:127.0.0.1:9200/test/user/_search
{
"query": {
"match": {
"age": 20
}
}
}
filter 过滤
must 匹配
6、全文检索
POST:127.0.0.1:9200/test/user/_search
{
"query": {
"match": {
"name": "三 五"
}
}
}
7、高亮显示
POST:127.0.0.1:9200/test/user/_search
{
"query": {
"match": {
"name": "三 五"
}
},
"highlight": {
"fields": {
"name": {}
}
}
}
8、聚合操作,类似SQL中的 group by 操作
POST:127.0.0.1:9200/test/user/_search
{
"aggs": {
"all_interests": {
"terms": {
"field": "age"
}
}
}
}