Elasticsearch是使用Restful风格的http请求访问的,请求参数和返回值都是Json格式的,我们可以使用
kibana发送http请求操作ES。
创建没有结构的索引:路径:ip地址:端口号/索引名
注:在kibana中所有的请求都会省略ip地址:端口号,之后的路径我们省略写ip地址:端口号.
请求方式:PUT
创建没有结构的索引:
POST /索引名 例如: PUT /product
创建有结构的索引:
PUT /索引名
{
"mappings":{
"properties":{
"域名1":{
"type":域的类型,
"store":是否单独存储,
"index":是否创建索引,
"analyzer":分词器
},
"域名2":{
...
}
}
}
}
例如:
PUT /product1
{
"mappings": {
"properties": {
"id":{
"type": "integer",
"store": true,
"index": true
},
"name":{
"type": "text",
"store": true,
"index": true
},
"desc":{
"type": "text",
"store": true,
"index": true
}
}
}
}
域的类型:
字符串类型 text
整数类型 long, integer, short, byte
浮点类型 double, float
日期类型 date
布尔类型 boolean
数组类型 array
对象类型 object
不分词的字符串 keyword
index:该域是否创建索引。只有值设置为true,才能根据该域的关键词查询文档。
根据关键词查询文档:
GET /索引名/_search
{
"query":{
"term":{
搜索字段: 关键字
}
}
}
store:是否单独存储。如果设置为true,则该域能够单独查询。
单独查询某个域:
GET /索引名/_search
{
"stored_fields": ["域名"]
}
删除索引:
DELETE /索引名2.文档操作
新增/修改文档
id值不写时自动生成文档id,id和已有id重复时修改文档
POST /索引/_doc/[id值]
{
"field名":field值
}
例如:
POST /product/_doc/1
{
"id":1001,
"name":"iphone13",
"desc":"iphone13是最新的苹果手机"
}
根据id查询查询文档
GET /索引/_doc/id值
删除文档
DELETE /索引/_doc/id值
DELETE /product/_doc/1
根据id批量查询文档
GET /索引/_mget
{
"docs":[
{"_id":id值},
{"_id":id值}
]
}
例如:
GET /product/_mget
{
"docs":[
{"_id":1},
{"_id":2}
]
}
查询结果:
{
"docs" : [
{
"_index" : "product",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 4,
"_primary_term" : 1,
"found" : true,
"_source" : {
"id" : 1001,
"name" : "iphone13",
"desc" : "iphone13是最新的苹果手机"
}
},
{
"_index" : "product",
"_type" : "_doc",
"_id" : "2",
"_version" : 1,
"_seq_no" : 5,
"_primary_term" : 1,
"found" : true,
"_source" : {
"id" : 1002,
"name" : "三星S8",
"desc" : "三星S8很漂亮"
}
}
]
}
查询所有文档:
GET /索引/_search
{
"query": {
"match_all": {}
}
}
例如:
GET /product/_search
{
"query": {
"match_all": {}
}
}
查询结果:
{
"took" : 4,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "product",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"id" : 1001,
"name" : "iphone13",
"desc" : "iphone13是最新的苹果手机"
}
},
{
"_index" : "product",
"_type" : "_doc",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"id" : 1002,
"name" : "三星S8",
"desc" : "三星S8很漂亮"
}
}
]
}
}
修改文档部分字段:
POST /索引/_doc/[id值]/_update
{
"doc":{
域名:值
}
}
例如:
POST /product/_doc/1/_update
{
"doc":{
"desc":"iphone13的性能很棒"
}
}
查询结果
{
"_index" : "product",
"_type" : "_doc",
"_id" : "1",
"_version" : 2,
"_seq_no" : 6,
"_primary_term" : 1,
"found" : true,
"_source" : {
"id" : 1001,
"name" : "iphone13",
"desc" : "iphone13的性能很棒"
}
}
注意:
- ElasticSearch执行删除操作时,ES先标记文档为deleted状态,而不是直接物理删除。当ES存储空
间不足或工作空闲时,才会执行物理删除操作。 - ElasticSearch执行修改操作时,ES 不会真的修改document中的数据,而是标记ES中原有的文档
为deleted状态,再创建一个新的文档来存储数据。



