说明:如何快速了解集群的健康状况?green、yellow、red? green:每个索引的primary shard和replica shard都是active状态的 yellow:每个索引的primary shard都是active状态的,但是部分replica shard不是active状态,处于不可用的状态 red:不是所有索引的primary shard都是active状态的,部分索引有数据丢失了
(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" ] }全量替换:
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" } }说明:不会理解物理删除,只会将其标记为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:desc3、指定要查询出来商品的名称和价格
GET /ecommerce/product/_search?_source=name,price1、查询所有的商品(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
跟全文检索相对应,相反,全文检索会将输入的搜索串拆解开来,去倒排索引里面去一一匹配,只要能匹配上任意一个拆解后的单词,就可以作为结果返回。
phrase search,要求输入的搜索串,必须在指定的字段文本中,完全包含一模一样的,才可以算匹配,才能作为结果返回。
GET /ecommerce/product/_search { "query" : { "match_phrase" : { "producer" : "yagao 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教程(龙果学院)