因为本文篇幅较长,想要获取 PDF,请关注‘公众号 - 菜鸟成长学习笔记’回复 ”es 手册 ” 即可支付文件。
es 概括
Elaticsearch,简称为 ES,ES 是一个开源的高扩大的分布式全文搜索引擎,Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档。
基本要素
ES 是一个文档型数据库,在与传统的关系型数据库上,存在着肯定的差别。上面将 ES 外面波及到的元素与关系型数据库进行一一对应。
ElasticSearch | 索引(index) | 类型(type) | 文档(document) | 字段(field) |
---|---|---|---|---|
MySQL | 数据库(database) | 数据表(table) | 数据行(row) | 数据列(column) |
索引操作
创立索引
向 ES 服务器发 PUT 申请:http://127.0.0.1:9200/shopping
。创立索引只能应用 PUT 申请,PUT 是幂等性的,也就是说不存在的时候就会创立,存在的时候就不会从新创立而是返回索引曾经存在的信息。
{
"acknowledged": true,// 响应后果
"shards_acknowledged": true,// 分片后果
"index": "shopping"// 索引名称
}
查问索引
向 ES 服务器发 GET 申请:http://127.0.0.1:9200/shopping
。
{
"shopping": {// 索引名
"aliases": {},// 别名
"mappings": {},// 映射
"settings": {// 设置
"index": {// 设置 - 索引
"creation_date": "1617861426847",// 设置 - 索引 - 创立工夫
"number_of_shards": "1",// 设置 - 索引 - 主分片数量
"number_of_replicas": "1",// 设置 - 索引 - 主分片数量
"uuid": "J0WlEhh4R7aDrfIc3AkwWQ",// 设置 - 索引 - 主分片数量
"version": {// 设置 - 索引 - 主分片数量
"created": "7080099"
},
"provided_name": "shopping"// 设置 - 索引 - 主分片数量
}
}
}
}
查看所有索引
向 ES 服务器发 GET 申请:http://127.0.0.1:9200/_cat/indices?v
。
这里申请门路中的_cat 示意查看的意思,indices 示意索引,所以整体含意就是查看以后 ES 服务器中的所有索引,就如同 MySQL 中的 show tables 的感觉,服务器响应后果如下 :
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open shopping J0WlEhh4R7aDrfIc3AkwWQ 1 1 0 0 208b 208b
删除索引
向 ES 服务器发 DELETE 申请:http://127.0.0.1:9200/shopping
。
返回后果如下:
{"acknowledged": true}
文档操作
文档创立
假如索引曾经创立好了,接下来咱们来创立文档,并增加数据。这里的文档能够类比为关系型数据库中的表数据,增加的数据格式为 JSON 格局
在 Postman 中,向 ES 服务器发 POST 申请:http://127.0.0.1:9200/shopping/_doc
,申请体 JSON 内容为:
{
"title":"小米手机",
"category":"小米",
"images":"http://www.gulixueyuan.com/xm.jpg",
"price":3999.00
}
返回后果
{
"_index": "shopping",// 索引
"_type": "_doc",// 类型 - 文档
"_id": "ANQqsHgBaKNfVnMbhZYU",// 惟一标识,能够类比为 MySQL 中的主键,随机生成
"_version": 1,// 版本
"result": "created",// 后果,这里的 create 示意创立胜利
"_shards": {//
"total": 2,// 分片 - 总数
"successful": 1,// 分片 - 总数
"failed": 0// 分片 - 总数
},
"_seq_no": 0,
"_primary_term": 1
}
留神,此处发送文档创立申请的形式必须为 POST,不能是 PUT,否则会产生谬误。
下面的数据创立后,因为没有指定数据唯一性标识(ID),默认状况下,ES 服务器会随机生成一个。
如果想要自定义唯一性标识,须要在创立时指定:http://127.0.0.1:9200/shopping/_doc/1
,申请体 JSON 内容为:
{
"title":"小米手机",
"category":"小米",
"images":"http://www.gulixueyuan.com/xm.jpg",
"price":3999.00
}
返回后果如下:
{
"_index": "shopping",
"_type": "_doc",
"_id": "1",//<----- 自定义唯一性标识
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 1,
"_primary_term": 1
}
文档查问
查看文档时,须要指明文档的唯一性标识,相似于 MySQL 中数据的主键查问
在 Postman 中,向 ES 服务器发 GET 申请:http://127.0.0.1:9200/shopping/_doc/1
。
返回后果如下:
{
"_index": "shopping",
"_type": "_doc",
"_id": "1",
"_version": 1,
"_seq_no": 1,
"_primary_term": 1,
"found": true,
"_source": {
"title": "小米手机",
"category": "小米",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 3999
}
}
查找不存在的内容,向 ES 服务器发 GET 申请:http://127.0.0.1:9200/shoppin…。返回后果如下:
{
"_index": "shopping",
"_type": "_doc",
"_id": "1001",
"found": false
}
查看索引下所有数据,向 ES 服务器发 GET 申请:http://127.0.0.1:9200/shopping/_search
。
返回后果如下:
{
"took": 133,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 2,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "shopping",
"_type": "_doc",
"_id": "ANQqsHgBaKNfVnMbhZYU",
"_score": 1,
"_source": {
"title": "小米手机",
"category": "小米",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 3999
}
},
{
"_index": "shopping",
"_type": "_doc",
"_id": "1",
"_score": 1,
"_source": {
"title": "小米手机",
"category": "小米",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 3999
}
}
]
}
}
文档删除
删除一个文档不会立刻从磁盘上移除,它只是被标记成已删除(逻辑删除)。
在 Postman 中,向 ES 服务器发 DELETE 申请:http://127.0.0.1:9200/shopping/_doc/1
返回后果:
{
"_index": "shopping",
"_type": "_doc",
"_id": "1",
"_version": 4,
"result": "deleted",//<--- 删除胜利
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 4,
"_primary_term": 1
}
文档批改
全量批改
和新增文档一样,输出雷同的 URL 地址申请,如果申请体变动,会将原有的数据内容笼罩
在 Postman 中,向 ES 服务器发 POST 申请:http://127.0.0.1:9200/shopping/_doc/1
申请体 JSON 内容为:
{
"title":"华为手机",
"category":"华为",
"images":"http://www.gulixueyuan.com/hw.jpg",
"price":1999.00
}
批改胜利后,服务器响应后果:
{
"_index": "shopping",
"_type": "_doc",
"_id": "1",
"_version": 2,
"result": "updated",//<---updated 示意数据被更新
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 2,
"_primary_term": 1
}
部分更新
批改数据时,也能够只批改某一给条数据的部分信息
在 Postman 中,向 ES 服务器发 POST 申请:http://127.0.0.1:9200/shopping/_update/1
。
申请体 JSON 内容为:
{
"doc": {
"title":"小米手机",
"category":"小米"
}
}
返回后果如下:
{
"_index": "shopping",
"_type": "_doc",
"_id": "1",
"_version": 3,
"result": "updated",//<----updated 示意数据被更新
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 3,
"_primary_term": 1
}
URL 待条件查问
查找 category 为小米的文档,在 Postman 中,向 ES 服务器发 GET 申请:http://127.0.0.1:9200/shopping/_search?q=category: 小米
,返回后果如下:
{
"took": 94,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 3,
"relation": "eq"
},
"max_score": 1.3862942,
"hits": [
{
"_index": "shopping",
"_type": "_doc",
"_id": "ANQqsHgBaKNfVnMbhZYU",
"_score": 1.3862942,
"_source": {
"title": "小米手机",
"category": "小米",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 3999
}
},
......
]
}
}
上述为 URL 带参数模式查问,这很容易让不善者心怀歹意,或者参数值呈现中文会呈现乱码状况。为了防止这些状况,咱们可用应用带 JSON 申请体申请进行查问。
申请体带参查问
接下带 JSON 申请体,还是查找 category 为小米的文档,在 Postman 中,向 ES 服务器发 GET 申请:http://127.0.0.1:9200/shopping/_search
,附带 JSON 体如下:
{
"query":{
"match":{"category":"小米"}
}
}
返回后果如下:
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 3,
"relation": "eq"
},
"max_score": 1.3862942,
"hits": [
{
"_index": "shopping",
"_type": "_doc",
"_id": "ANQqsHgBaKNfVnMbhZYU",
"_score": 1.3862942,
"_source": {
"title": "小米手机",
"category": "小米",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 3999
}
},
......
]
}
}
带申请体形式的查找所有内容
查找所有文档内容,也能够这样,在 Postman 中,向 ES 服务器发 GET 申请:http://127.0.0.1:9200/shopping/_search
,附带 JSON 体如下
{
"query":{"match_all":{}
}
}
则返回所有文档内容:
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 6,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "shopping",
"_type": "_doc",
"_id": "ANQqsHgBaKNfVnMbhZYU",
"_score": 1,
"_source": {
"title": "小米手机",
"category": "小米",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 3999
}
},
......
]
}
}
查问指定字段
如果你想查问指定字段,在 Postman 中,向 ES 服务器发 GET 申请:http://127.0.0.1:9200/shopping/_search
,附带 JSON 体如下:
{
"query":{"match_all":{}
},
"_source":["title"]
}
返回后果如下:
{
"took": 5,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 6,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "shopping",
"_type": "_doc",
"_id": "ANQqsHgBaKNfVnMbhZYU",
"_score": 1,
"_source": {"title": "小米手机"}
},
......
]
}
}
分页查问
在 Postman 中,向 ES 服务器发 GET 申请:http://127.0.0.1:9200/shopping/_search
,附带 JSON 体如下:
{
"query":{"match_all":{}
},
"from":0,
"size":2
}
返回后果如下:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 6,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "shopping",
"_type": "_doc",
"_id": "ANQqsHgBaKNfVnMbhZYU",
"_score": 1,
"_source": {
"title": "小米手机",
"category": "小米",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 3999
}
},
]
}
}
查问排序
如果你想通过排序查出价格最高的手机,在 Postman 中,向 ES 服务器发 GET 申请:http://127.0.0.1:9200/shopping/_search
,附带 JSON 体如下:
{
"query":{"match_all":{}
},
"sort":{
"price":{"order":"desc"}
}
}
返回后果如下:
{
"took": 96,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 6,
"relation": "eq"
},
"max_score": null,
"hits": [
{
"_index": "shopping",
"_type": "_doc",
"_id": "ANQqsHgBaKNfVnMbhZYU",
"_score": null,
"_source": {
"title": "小米手机",
"category": "小米",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 3999
},
"sort": [3999]
},
......
]
}
}
多条件查问
假如想找出小米牌子,价格为 3999 元的。(must 相当于数据库的 &&), 在 Postman 中,向 ES 服务器发 GET 申请:http://127.0.0.1:9200/shopping/_search
,附带 JSON 体如下:
{
"query":{
"bool":{
"must":[{
"match":{"category":"小米"}
},{
"match":{"price":3999.00}
}]
}
}
}
返回后果如下:
{
"took": 134,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 2.3862944,
"hits": [
{
"_index": "shopping",
"_type": "_doc",
"_id": "ANQqsHgBaKNfVnMbhZYU",
"_score": 2.3862944,
"_source": {
"title": "小米手机",
"category": "小米",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 3999
}
}
]
}
}
假如想找出小米和华为的牌子。(should 相当于数据库的 ||)在 Postman 中,向 ES 服务器发 GET 申请:http://127.0.0.1:9200/shopping/_search
,附带 JSON 体如下:
{
"query":{
"bool":{
"should":[{
"match":{"category":"小米"}
},{
"match":{"category":"华为"}
}]
},
"filter":{
"range":{
"price":{"gt":2000}
}
}
}
}
返回后果如下:
{
"took": 8,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 6,
"relation": "eq"
},
"max_score": 1.3862942,
"hits": [
{
"_index": "shopping",
"_type": "_doc",
"_id": "ANQqsHgBaKNfVnMbhZYU",
"_score": 1.3862942,
"_source": {
"title": "小米手机",
"category": "小米",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 3999
}
},
.....
]
}
}
范畴查问
假如想找出小米和华为的牌子,价格大于 2000 元的手机。在 Postman 中,向 ES 服务器发 GET 申请:http://127.0.0.1:9200/shopping/_search
,附带 JSON 体如下:
{
"query":{
"bool":{
"should":[{
"match":{"category":"小米"}
},{
"match":{"category":"华为"}
}],
"filter":{
"range":{
"price":{"gt":2000}
}
}
}
}
}
返回后果如下:
{
"took": 72,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1.3862942,
"hits": [
{
"_index": "shopping",
"_type": "_doc",
"_id": "ANQqsHgBaKNfVnMbhZYU",
"_score": 1.3862942,
"_source": {
"title": "小米手机",
"category": "小米",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 3999
}
}
]
}
}
全文检索
这性能像搜索引擎那样,如品牌输出“小华”,返回后果带回品牌有“小米”和华为的。在 Postman 中,向 ES 服务器发 GET 申请:http://127.0.0.1:9200/shopping/_search
,附带 JSON 体如下:
{
"query":{
"match":{"category" : "小华"}
}
}
返回后果如下:
{
"took": 7,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 6,
"relation": "eq"
},
"max_score": 0.6931471,
"hits": [
{
"_index": "shopping",
"_type": "_doc",
"_id": "ANQqsHgBaKNfVnMbhZYU",
"_score": 0.6931471,
"_source": {
"title": "小米手机",
"category": "小米",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 3999
}
},
......
{
"_index": "shopping",
"_type": "_doc",
"_id": "BtR6sHgBaKNfVnMbX5Y5",
"_score": 0.6931471,
"_source": {
"title": "华为手机",
"category": "华为",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 1999
}
},
......
]
}
}
齐全匹配
在 Postman 中,向 ES 服务器发 GET 申请:http://127.0.0.1:9200/shopping/_search
,附带 JSON 体如下:
{
"query":{
"match_phrase":{"category" : "为"}
}
}
返回后果如下:
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 3,
"relation": "eq"
},
"max_score": 0.6931471,
"hits": [
{
"_index": "shopping",
"_type": "_doc",
"_id": "BtR6sHgBaKNfVnMbX5Y5",
"_score": 0.6931471,
"_source": {
"title": "华为手机",
"category": "华为",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 1999
}
},
......
]
}
}
高亮查问
在 Postman 中,向 ES 服务器发 GET 申请:http://127.0.0.1:9200/shopping/_search
,附带 JSON 体如下:
{
"query":{
"match_phrase":{"category" : "为"}
},
"highlight":{
"fields":{"category":{}//<---- 高亮这字段
}
}
}
返回后果如下:
{
"took": 100,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 3,
"relation": "eq"
},
"max_score": 0.6931471,
"hits": [
{
"_index": "shopping",
"_type": "_doc",
"_id": "BtR6sHgBaKNfVnMbX5Y5",
"_score": 0.6931471,
"_source": {
"title": "华为手机",
"category": "华为",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 1999
},
"highlight": {
"category": ["华 <em> 为 </em>"//<------ 高亮一个为字。]
}
},
{
"_index": "shopping",
"_type": "_doc",
"_id": "B9R6sHgBaKNfVnMbZpZ6",
"_score": 0.6931471,
"_source": {
"title": "华为手机",
"category": "华为",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 1999
},
"highlight": {
"category": ["华 <em> 为 </em>"]
}
},
{
"_index": "shopping",
"_type": "_doc",
"_id": "CdR7sHgBaKNfVnMbsJb9",
"_score": 0.6931471,
"_source": {
"title": "华为手机",
"category": "华为",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 1999
},
"highlight": {
"category": ["华 <em> 为 </em>"]
}
}
]
}
}
分组查问
在 Postman 中,向 ES 服务器发 GET 申请:http://127.0.0.1:9200/shopping/_search
,附带 JSON 体如下:
{
"aggs":{// 聚合操作
"price_group":{// 名称,随便起名
"terms":{// 分组
"field":"price"// 分组字段
}
}
}
}
返回后果如下:
{
"took": 63,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 6,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "shopping",
"_type": "_doc",
"_id": "ANQqsHgBaKNfVnMbhZYU",
"_score": 1,
"_source": {
"title": "小米手机",
"category": "小米",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 3999
}
},
{
"_index": "shopping",
"_type": "_doc",
"_id": "A9R5sHgBaKNfVnMb25Ya",
"_score": 1,
"_source": {
"title": "小米手机",
"category": "小米",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 1999
}
},
{
"_index": "shopping",
"_type": "_doc",
"_id": "BNR5sHgBaKNfVnMb7pal",
"_score": 1,
"_source": {
"title": "小米手机",
"category": "小米",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 1999
}
},
{
"_index": "shopping",
"_type": "_doc",
"_id": "BtR6sHgBaKNfVnMbX5Y5",
"_score": 1,
"_source": {
"title": "华为手机",
"category": "华为",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 1999
}
},
{
"_index": "shopping",
"_type": "_doc",
"_id": "B9R6sHgBaKNfVnMbZpZ6",
"_score": 1,
"_source": {
"title": "华为手机",
"category": "华为",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 1999
}
},
{
"_index": "shopping",
"_type": "_doc",
"_id": "CdR7sHgBaKNfVnMbsJb9",
"_score": 1,
"_source": {
"title": "华为手机",
"category": "华为",
"images": "http://www.gulixueyuan.com/xm.jpg",
"price": 1999
}
}
]
},
"aggregations": {
"price_group": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": 1999,
"doc_count": 5
},
{
"key": 3999,
"doc_count": 1
}
]
}
}
}
下面返回后果会附带原始数据的。若不想要不附带原始数据的后果,在 Postman 中,向 ES 服务器发 GET 申请:http://127.0.0.1:9200/shopping/_search
,附带 JSON 体如下:
{
"aggs":{
"price_group":{
"terms":{"field":"price"}
}
},
"size":0
}
返回后果如下:
{
"took": 60,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 6,
"relation": "eq"
},
"max_score": null,
"hits": []},
"aggregations": {
"price_group": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": 1999,
"doc_count": 5
},
{
"key": 3999,
"doc_count": 1
}
]
}
}
}
查问平均值
在 Postman 中,向 ES 服务器发 GET 申请:http://127.0.0.1:9200/shopping/_search
,附带 JSON 体如下:
{
"aggs":{
"price_avg":{// 名称,随便起名
"avg":{// 求均匀
"field":"price"
}
}
},
"size":0
}
返回后果如下:
{
"took": 14,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 6,
"relation": "eq"
},
"max_score": null,
"hits": []},
"aggregations": {
"price_avg": {"value": 2332.3333333333335}
}
}
映射关系
有了索引库,等于有了数据库中的 database。接下来就须要建索引库 (index) 中的映射了,相似于数据库 (database) 中的表构造 (table)。创立数据库表须要设置字段名称,类型,长度,束缚等;索引库也一样,须要晓得这个类型下有哪些字段,每个字段有哪些束缚信息,这就叫做映射(mapping)。
先创立一个索引:
# PUT http://127.0.0.1:9200/user
返回后果:
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "user"
}
创立映射
# PUT http://127.0.0.1:9200/user/_mapping
{
"properties": {
"name":{
"type": "text",
"index": true
},
"sex":{
"type": "keyword",
"index": true
},
"tel":{
"type": "keyword",
"index": false
}
}
}
返回后果如下:
{"acknowledged": true}
查问映射
#GET http://127.0.0.1:9200/user/_mapping
返回后果如下:
{
"user": {
"mappings": {
"properties": {
"name": {"type": "text"},
"sex": {"type": "keyword"},
"tel": {
"type": "keyword",
"index": false
}
}
}
}
}
减少数据
#PUT http://127.0.0.1:9200/user/_create/1001
{
"name":"小米",
"sex":"男的",
"tel":"1111"
}
返回后果如下:
{
"_index": "user",
"_type": "_doc",
"_id": "1001",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
查找 name 含有”小“数据:
#GET http://127.0.0.1:9200/user/_search
{
"query":{
"match":{"name":"小"}
}
}
返回后果如下:
{
"took": 495,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.2876821,
"hits": [
{
"_index": "user",
"_type": "_doc",
"_id": "1001",
"_score": 0.2876821,
"_source": {
"name": "小米",
"sex": "男的",
"tel": "1111"
}
}
]
}
}
查找 sex 含有”男“数据:
#GET http://127.0.0.1:9200/user/_search
{
"query":{
"match":{"sex":"男"}
}
}
返回后果如下:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 0,
"relation": "eq"
},
"max_score": null,
"hits": []}
}
找不想要的后果,只因创立映射时 ”sex” 的类型为 ”keyword”。”sex” 只能齐全为”男的“,能力得出原数据。
#GET http://127.0.0.1:9200/user/_search
{
"query":{
"match":{"sex":"男的"}
}
}
返回后果如下:
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.2876821,
"hits": [
{
"_index": "user",
"_type": "_doc",
"_id": "1001",
"_score": 0.2876821,
"_source": {
"name": "小米",
"sex": "男的",
"tel": "1111"
}
}
]
}
}
查询电话
# GET http://127.0.0.1:9200/user/_search
{
"query":{
"match":{"tel":"11"}
}
}
返回后果如下:
{
"error": {
"root_cause": [
{
"type": "query_shard_exception",
"reason": "failed to create query: Cannot search on field [tel] since it is not indexed.",
"index_uuid": "ivLnMfQKROS7Skb2MTFOew",
"index": "user"
}
],
"type": "search_phase_execution_exception",
"reason": "all shards failed",
"phase": "query",
"grouped": true,
"failed_shards": [
{
"shard": 0,
"index": "user",
"node": "4P7dIRfXSbezE5JTiuylew",
"reason": {
"type": "query_shard_exception",
"reason": "failed to create query: Cannot search on field [tel] since it is not indexed.",
"index_uuid": "ivLnMfQKROS7Skb2MTFOew",
"index": "user",
"caused_by": {
"type": "illegal_argument_exception",
"reason": "Cannot search on field [tel] since it is not indexed."
}
}
}
]
},
"status": 400
}
报错只因创立映射时 ”tel” 的 ”index” 为 false。