因为本文篇幅较长,想要获取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.sizeyellow 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。