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