GET /_cat/health?v
说明:如何快速了解集群的健康状况?green、yellow、red?
green:每个索引的primary shard和replica shard都是active状态的
yellow:每个索引的primary shard都是active状态的,但是部分replica shard不是active状态,处于不可用的状态
red:不是所有索引的primary shard都是active状态的,部分索引有数据丢失了
GET /_cat/indices?v
(1)手动指定document id(用于其他库倒进来时本身就含有id的情况)
PUT /ecommerce/product/1
{
"name" : "gaolujie yagao",
"desc" : "gaoxiao meibai",
"price" : 30,
"producer" : "gaolujie producer",
"tags": [ "meibai", "fangzhu" ]
}
说明:若已经有/ecommerce/product/1该数据,此时“新增”操作变成“全量替换”,旧数据被deleted。因此如果我们要需要创建,而不允许替换数据(逻辑:若已经有该条数据,则不进行任何操作(报错回滚))
(2)自动生成document id(自动生成的id,长度为20个字符,URL安全,base64编码,GUID,分布式系统并行生成时不可能会发生冲突)
POST /ecommerce/product
{
"name" : "gaolujie yagao",
"desc" : "gaoxiao meibai",
"price" : 30,
"producer" : "gaolujie producer",
"tags": [ "meibai", "fangzhu" ]
}
GET /ecommerce/product/1
全量替换:
PUT /ecommerce/product/1
{
"name" : "jiaqiangban gaolujie yagao",
"desc" : "gaoxiao meibai",
"price" : 30,
"producer" : "gaolujie producer",
"tags": [ "meibai", "fangzhu" ]
}
部分修改:
POST /ecommerce/product/1/_update
{
"doc": {
"name": "jiaqiangban gaolujie yagao"
}
}
DELETE /ecommerce/product/1
说明:不会理解物理删除,只会将其标记为deleted,当数据越来越多的时候,在后台自动删除
1、搜索全部商品:
GET /ecommerce/product/_search
查询结果部分字段说明:
took:耗费了几毫秒。
timed_out:是否超时,这里是没有。
_shards:数据拆成了5个分片,所以对于搜索请求,会打到所有的primary shard(或者是它的某个replica shard也可以)。
hits.total:查询结果的数量,3个document。
hits.max_score:score的含义,就是document对于一个search的相关度的匹配分数,越相关,就越匹配,分数也高。
hits.hits:包含了匹配搜索的document的详细数据。
2、搜索商品名称中包含yagao的商品,而且按照售价降序排序
GET /ecommerce/product/_search?q=name:yagao&sort=price:desc
3、指定要查询出来商品的名称和价格
GET /ecommerce/product/_search?_source=name,price
1、查询所有的商品(match_all)
GET /ecommerce/product/_search
{
"query": { "match_all": {} }
}
2、查询名称包含yagao的商品,同时按照价格降序排序(sort)
GET /ecommerce/product/_search
{
"query" : {
"match" : {
"name" : "yagao"
}
},
"sort": [
{ "price": "desc" }
]
}
3、分页查询商品(from,size)
例如:总共3条商品,假设每页就显示1条商品,现在显示第2页,所以就查出来第2个商品
GET /ecommerce/product/_search
{
"query": { "match_all": {} },
"from": 1,
"size": 1
}
4、指定要查询出来商品的名称和价格(source)
GET /ecommerce/product/_search
{
"query": { "match_all": {} },
"_source": ["name", "price"]
}
5、查询name和desc都含yagao的商品(multi_match)
GET /ecommerce/product/_search
{
"query": {
"multi_match": {
"query": "yagao",
"fields": ["name", "desc"]
}
}
}
6、查询价格大于等于30的商品(range)
GET /ecommerce/product/_search
{
"query": {
"range": {
"price": {
"gte": 30
}
}
}
}
7、查询name是yagao的商品(term 或者 terms数组指定多个)
GET /test_index/test_type/_search
{
"query": {
"term": {
"name ": "yagao"
}
}
}
说明:不常用。若想用term查询,则被查询的字段需要定义为不分词。
1、搜索商品名称包含yagao,而且售价大于25元的商品
GET /ecommerce/product/_search
{
"query" : {
"bool" : {
"must" : {
"match" : {
"name" : "yagao"
}
},
"filter" : {
"range" : {
"price" : { "gt" : 25 }
}
}
}
}
}
说明:bool 多条件查询,含以下参数:
must:返回的doc必须满足must子句的条件,并且参与计算score
must_not:返回的文档必须不满足must_not定义的条件
should:返回的文档可能满足should子句的条件。在一个Bool查询中,如果没有must或者filter,有一个或者多个should子句,那么只要满足一个就可以返回。minimum_should_match参数定义了至少满足几个子句。
filter:返回的doc必须满足filter子句的条件,不参与计算sorce
GET /ecommerce/product/_search
{
"query" : {
"match" : {
"producer" : "yagao producer"
}
}
}
跟全文检索相对应,相反,全文检索会将输入的搜索串拆解开来,去倒排索引里面去一一匹配,只要能匹配上任意一个拆解后的单词,就可以作为结果返回。
phrase search,要求输入的搜索串,必须在指定的字段文本中,完全包含一模一样的,才可以算匹配,才能作为结果返回。
GET /ecommerce/product/_search
{
"query" : {
"match_phrase" : {
"producer" : "yagao producer"
}
}
}
GET /ecommerce/product/_search
{
"query" : {
"match" : {
"producer" : "producer"
}
},
"highlight": {
"fields" : {
"producer" : {}
}
}
}
获取商品id为1和2的商品信息(假设在同一个index和type下)
GET /_mget
{
"docs" : [
{
"_index" : "ecommerce",
"_type" : "product",
"_id" : 1
},
{
"_index" : "ecommerce",
"_type" : "product",
"_id" : 2
}
]
}
或者
GET /ecommerce/_mget
{
"docs" : [
{
"_type" : "product",
"_id" : 1
},
{
"_type" : "product",
"_id" : 2
}
]
}
或者
GET /ecommerce/product/_mget
{
"ids": [1, 2]
}
需求:
1、删除id为1的商品
2、创建id为3的商品(name为“zhonghua yagao”)
3、修改商品2的name为“replaced zhonghua yagao”(采用全量替换的方式)
4、修改商品3的name为“bulk zhonghua yagao”(采用部分更新的方式)
POST /_bulk
{ "delete": { "_index": "ecommerce", "_type": "product", "_id": "1" }}
{ "create": { "_index": "ecommerce", "_type": "product", "_id": "3" }}
{ "name": "zhonghua yagao" }
{ "index": { "_index": "ecommerce", "_type": "product", "_id": "2" }}
{ "name": "replaced zhonghua yagao" }
{ "update": { "_index": "ecommerce", "_type": "product", "_id": "3", "_retry_on_conflict" : 3} }
{ "doc" : {"name" : "bulk zhonghua yagao"} }
说明:
(1)delete:删除一个文档,只要1个json串就可以了
(2)create:PUT /index/type/id/_create,强制创建
(3)index:普通的put操作,可以是创建文档,也可以是全量替换文档
(4)update:执行的partial update操作
bulk api对json的语法,有严格的要求,每个json串不能换行,只能放一行,同时一个json串和一个json串之间,必须有一个换行
参考:ElasticSearch教程(龙果学院)