环境
- elasticsearch服务端-默认端口号-9100
- elasticsearch-head-master(前端项目需要nodejs)客户端-默认端口号-9200
-
数据库结构
结构化数据:MySQL,字段存储,不易添加字段
- 非结构化数据:redis,MongoDB,以KV形式存储
-
概念
Elasticsearch是开源高扩展的分布式全文搜索引擎,通过全文检索的方式,生成一个倒排索引的索引库
在搜索词语的时候,可以直接找到相关出现的文档位置,无需去其他文档中搜索 正排索引:通过id、索引字段寻找内容数据
- 倒排索引:通过内容数据寻找文档编号或id
类型
- index 索引
- Field 字段
{"name": "zhangsan"}
- mapping 映射
{"name":"zhangsan", "age":18}
- 元数据
- _index:文档存储位置
- _type:文档的对象类型
- _id:文档唯一标识符
- 自动判断类型
- boolean:
true
、false
- long:
123
- double:
123.45
- date:
"2020-05-30"
- string(已抛弃):
"zhangsan"
- 需要分词的数据:text,支持分词,不支持聚合
- 不需要分词数据:keyword,不支持分支,支持聚合
操作
索引
// 创建索引
PUT person
// 查询索引
GET person
// 删除索引
DELETE person
// 查询映射
GET person/_mapping
// 添加映射
PUT person/_mapping
{
"properties":{
"name":{
"type":"keyword"
},
"age":{
"type":"integer"
}
}
}
// 创建索引并添加映射
PUT person
{
"mappings": {
"properties": {
"name":{"type": "keyword"},
"age":{"type":"integer"}
}
}
}
// 索引库中添加字段
PUT person/_mapping
{
"properties":{
"address":{"type":"text"}
}
}
数据操作
```json // 添加数据 POST http:/索引名/_doc {“name”:”zhangsan”, “age”:18} _doc 可以用 _create // 修改覆盖数据 POST http:/索引名/_doc/id {“name”:”zhangsan”, “age”:18} // 获取数据 GET http:*/索引名/_doc/id
- boolean:
// 获取所有数据 GET http:/索引名/_search // 完全覆盖 POST http:/索引名/_updata/id // 删除数据 DELETE http:/索引名/_doc/id // 条件查询 GET http:/索引名/_search?q=字段:内容 GET http:/索引名/_search {“query”:{“match”:{“字段”:”内容”}}} 查询:匹配查询:查询条件,中文在URL中可能有乱码 // 所有内容分页查询 GET http:/索引名/_search {“query”: { “match_all”:{}, “from”:0, “size”:2 }} 分页公式:(页码-1)*每页条数size {“query”: { “match_all”:{}, “_source”:[“name”, “age”], // 指定需要查询的内容字段 “sort”:[ “age”:{“order”:”desc”} // 根据字段排序 ] }} // 多条件查询 {“query”:{ “bool”:{ // 条件 “must”:[ // 多条件查询,must表示and,should表示or {“match”:{“category”:”小米”}}, {“match”:{“price”:1999.00}} ], “filter”:{ “range”:{ “price”:{“gt”:5000} // 过滤大于5000的商品 } } } }} // 倒排索引匹配 {“query”: { “match”:{“category”:”小米”} // 模糊查询”小华:小、华” }} {“query”:{ “match_phrase”:{“category”:”小华”} // 精准、完全查询 }, “highlight”:{ “fields”:{“category”:{}} // 高亮显示 } }
```