环境
- 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”:{}} // 高亮显示 } }
```
