一、索引
ES里,数据库(Database)对应的概念叫 索引(Index)。
1. 创建索引
PUT http://127.0.0.1:9200/shopping
2. 查看所有索引
GET http://127.0.0.1:9200/_cat/indices?v
3. 删除索引
DELETE http://127.0.0.1:9200/shopping
二、文档
ES里,数据库的表(Table)对应的概念是 类型(Type)。
然而在新版本ES里,已经弃用类型(Type)的概念了。
ES里,数据库的行(row)对应的概念是 文档(Document)。
1. 创建文档
POST http://127.0.0.1:9200/shopping/_doc 或
POST http://127.0.0.1:9200/shopping/_create
{
"title":"小米手机",
"category":"小米",
"images":"http://www.gulixueyuan.com/xm.jpg",
"price":3999.00
}
手动指定ID:URL后加上 /{id}
2. 查询单条文档
GET http://127.0.0.1:9200/shopping/_doc/1001
3. 查询所有文档
GET http://127.0.0.1:9200/shopping/_search
4. 修改文档
分为完全修改和部分修改。
完全修改
PUT http://127.0.0.1:9200/shopping/_doc/1001
{
"title":"小米手机",
"category":"小米",
"images":"http://www.gulixueyuan.com/xm.jpg",
"price":4999.00
}
部分修改
POST http://127.0.0.1:9200/shopping/_update/1001
{
"doc": {
"title": "华为手机"
}
}
5. 删除文档
DELETE http://127.0.0.1:9200/shopping/_doc/1001
三、查询
方式1:
GET http://127.0.0.1:9200/shopping/_search?q=category:小米
方式2(推荐):
GET http://127.0.0.1:9200/shopping/_search
{
"query": {
"match": {
"category": "小米"
}
}
}
match 改为 match_all 即为全量查询。
分页查询
{
"query": {
"match": {
"category": "小米"
}
},
"from": 0,
"size": 2
}
限制查询字段
{
"query": {
"match": {
"category": "小米"
}
},
"from": 0,
"size": 2,
"_source": ["title"]
}
排序
{
"query": {
"match": {
"category": "小米"
}
},
"from": 0,
"size": 2,
"_source": ["title"],
"sort": {
"price": {
"order": "desc"
}
}
}
多条件查询 bool,AND:关键字 must
{
"query": {
"bool": {
"must": [
{
"match": {
"category": "小米"
}
},
{
"match": {
"price": 3999.00
}
}
]
}
}
}
多条件查询,OR:关键字 should
{
"query": {
"bool": {
"should": [
{
"match": {
"category": "小米"
}
},
{
"match": {
"price": 3999.00
}
}
]
}
}
}
结果按范围过滤,关键字 filter
{
"query": {
"bool": {
"should": [
{
"match": {
"category": "小米"
}
},
{
"match": {
"price": 3999.00
}
}
],
"filter": {
"range": {
"price": {
"gt": 3500
}
}
}
}
}
}
完全匹配 match_phrase
上面的 match 和 match_all 都属于模糊查询,会拆分关键词
如果要作为整体进行查询,应该用 match_phrase
{
"query": {
"match_phrase": {
"category": "小华"
}
}
}
高亮查询
{
"query": {
"match": {
"category": "小华"
}
},
"highlight": {
"fields": {
"category": {}
}
}
}
聚合查询 aggs
{
"aggs": { //聚合操作
"price_group": { //名称,随意起名
"terms": { //分组
"field": "price" //分组字段
}
}
}
}
聚合查询,只留统计结果
{
"aggs": {
"price_group": {
"terms": {
"field": "price"
}
}
},
"size": 0
}