因为我最早是先学 sql,我相信很多人也和我一样
所以 我觉得用sql 的概念来重说es 概念会比较好
注意: mysql 的索引与es的索引不是同一个意思
先安装好kibana 用kibana 学习 ES 脚本会比较容易
es在kibana中调试时,指令分两个部分
第一行是指令
第二行开始是指令的 json参数 (可省略)
PUT 表名(要小写)
例子:
PUT zdy
或者
PUT zdy
{ "settings": { "number_of_shards": 1, "number_of_replicas": 0 } }
PUT /表名/_mapping
例子:
PUT /zdy/_mapping
{
"properties": {
"姓名": {
"type": "text",
"analyzer": "ik_max_word"
},
"住址": {
"type": "keyword",
"index": false
},
"性别": {
"type": "text",
"index": false
},
"年龄": {
"type": "float"
}
}
}
PUT /cars
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0
},
"mappings": {
"properties": {
"color": {
"type": "keyword"
},
"make": {
"type": "keyword"
}
}
}
}
PUT /表名/指定编号 或者 >PUT /表名(自动编号)
POST zdy/_doc/1
{
"姓名":"zg",
"年龄":9,
"性别":"男",
"住址":"江苏南通"
}
###注意:字符串 不要用单引号
###或者
POST /zdy/_doc
{
"名称":"超米手机",
"图片":"http://image.leyou.com/12479122.jpg",
"价格":3699.00,
"是否卖出":true
}
POST 表/_bulk
###_bulk 是指令 不能改类似的还有_search ,_update 等
{action:{metadata}}\n 操作,
##action:可以是create(创建),index(保存),update(更新),delete(删除)等
##metadata :元数据,可以写数据的"_id"等
{request body}\n
##request body:写数据本身
{action:{metadata}}\n
{request body}\n
例子:
POST /cars/_bulk
{ "index": {}}
{ "price" : 10000, "color" : "red", "make" : "honda", "sold" : "2014-10-28" }
{ "index": {}}
{ "price" : 20000, "color" : "red", "make" : "honda", "sold" : "2014-11-05" }
{ "index": {}}
{ "price" : 30000, "color" : "green", "make" : "ford", "sold" : "2014-05-18" }
{ "index": {}}
{ "price" : 15000, "color" : "blue", "make" : "toyota", "sold" : "2014-07-02" }
{ "index": {}}
{ "price" : 12000, "color" : "green", "make" : "toyota", "sold" : "2014-08-19" }
{ "index": {}}
{ "price" : 20000, "color" : "red", "make" : "honda", "sold" : "2014-11-05" }
{ "index": {}}
{ "price" : 80000, "color" : "red", "make" : "bmw", "sold" : "2014-01-01" }
{ "index": {}}
{ "price" : 25000, "color" : "blue", "make" : "ford", "sold" : "2014-02-12" }
PUT /索引库/_doc/id值
POST /索引库/_doc/id值
PUT 与POST 更新操作区别
POST 主要是创建 ,而 PUT主要是修改
当POST 用于修改时 必须在URL带_update后缀,
更新前会比对新旧数据,如果新旧数据完全相同,将不会进行任何操作,不会影响序列号、版本号信息。 如果URI不带_update,不会检查原数据,都会显示updated
PUT路径没法带_update,每次都会更新显示updated
例子:
PUT /zdy/_doc/1
{
"名称":"超大米手机",
"图片":"http://image.leyou.com/12479122.jpg",
"价格":3899.00,
"库存": 100,
"是否卖出":true
}
###删除记录
DELETE /索引名/_doc/id值
###删除表
DELETE /索引名
1. 查询所有
`GET /索引库名/_search`
{ "query": { "match_all": {} } }
使用match_all 可以查询到所有文档,是没有查询条件下的默认语句。
2. 匹配查询
GET /索引库名/_search
{
"query":{
"match": {
"category" : "Clothing"
}
}
}
3. 精确分词匹配查询
GET /索引库名/_search
{
"query":{
"match_phrase": {
"category":"Women's Clothing"
}
}
}
###先分词,按照 Women's 和 Clothing 两个单词进行检索,取并集
4. 相似度匹配
GET /索引库名/_search{
"query": {
"match": {
"title": {
"query": "小米手机电视",
"minimum_should_match": "60%"
}
}
}}
5. 多字段匹配
GET /索引库名/_search
{
"query": {
"multi_match": {
"query": "小米",
"fields":["title","subTitle"]
}
}
6. 多值匹配
GET /索引库名/_search
{
"query": {
"terms": {
"title": ["小米","手机"]
}
}
}
7. 范围匹配
GET /索引库名/_search
{
"query": {
"range": {
"price": {
"gte": 2799,
"lte": 3899
}
}
}
}
8.模糊查询 类似 like
GET /索引库名/_search
{
"query": {
"fuzzy": {
"title": {
"value": "oope",
"fuzziness": 2
}
}
}
}
##默认允许错误一个字母,最大为两个字母 正确标题 oppo
GET /索引库名/_search
{
"sort":[
{
"price":{
"order":"desc"
}
}
]
}
GET /ecommerce/product/_search
{
"from":0,
"size":2
}
##解析
"from":0 #从第几个数据开始
"size":2 #每页多少数据
GET /ecommerce/product/_search
{
"_source":["price","min_price","base_price"]
}
#只显示三个字段
"_source": {
"excludes": "{images}"
}
##使用excludes 排除字段