1、ElasticSearch简介:
Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库--无论是开源还是私有。
但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常 复杂。
Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。
然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:
- 一个分布式的实时文档存储,每个字段 可以被索引与搜索
- 一个分布式实时分析搜索引擎
- 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数
2、Elasticsearch与MySQL数据库逻辑结构概念的对比
Elasticsearch | MySQL |
---|---|
索引(index) | 数据库(databases) |
类型(type) | 表(table) |
文档(document) | 行(row) |
3、ElasticSearch部署与启动
windows 5.6.8版本:https://www.elastic.co/downloads/past-releases/elasticsearch-5-6-8
解压后运行 bin\elasticsearch.bat
浏览器输入地址:http://localhost:9200 访问
{
name: "Cdf7Y2X",
cluster_name: "elasticsearch",
cluster_uuid: "qMJWPKV4QxCfNEENQuZi6w",
version: {
number: "5.6.8",
build_hash: "688ecce",
build_date: "2018-02-16T16:46:30.010Z",
build_snapshot: false,
lucene_version: "6.6.1"
},
tagline: "You Know, for Search"
}
4、Postman调用 RestAPI
4.1、新建索引
例如我们要创建一个叫userinfo的索引 ,就以put方式提交:http://127.0.0.1:9200/userinfo
返回结果:
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "userinfo"
}
4.2、新建文档
post方式提交: http://127.0.0.1:9200/userinfo/user
body:
{
"username":"jack",
"description":"JAVA小菜鸡",
"password":"666"
}
response:
{
"_index": "userinfo",
"_type": "user",
"_id": "AWjaMyh2NTv1I7PSlAUU",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": true
}
4.3、查询全部文档
get 方式访问:http://127.0.0.1:9200/userinfo/user/_search
response:
{
"took": 103,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 1,
"hits": [
{
"_index": "userinfo",
"_type": "user",
"_id": "AWjaNbgENTv1I7PSlAUW",
"_score": 1,
"_source": {
"username": "lucy",
"description": "da mei zi",
"password": "111"
}
},
{
"_index": "userinfo",
"_type": "user",
"_id": "AWjaMyh2NTv1I7PSlAUU",
"_score": 1,
"_source": {
"username": "jack",
"description": "JAVA小菜鸡",
"password": "666"
}
},
{
"_index": "userinfo",
"_type": "user",
"_id": "AWjaNVxrNTv1I7PSlAUV",
"_score": 1,
"_source": {
"username": "tom",
"description": "Hello World",
"password": "123"
}
}
]
}
}
_id 属性是ElasticSearch自动生成的。我们存入的实体信息在_source 属性中。
4.4、修改文档
选择记录中的一条加上 _id 信息put方式提交:http://127.0.0.1:9200/userinfo/user/AWjaMyh2NTv1I7PSlAUU
body:
{
"username": "jack",
"description": "JAVA大菜鸡",
"password": "555"
}
response:
{
"_index": "userinfo",
"_type": "user",
"_id": "AWjaMyh2NTv1I7PSlAUU",
"_version": 2,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": false
}
可以看到修改成功了,可以重新访问所有文档列表查看信息
当我们在地址中的ID不存在,则会为创建新文档
4.5、根据id查询文档
get方式请求访问:http://127.0.0.1:9200/userinfo/user/AWjaNVxrNTv1I7PSlAUV
response:
{
"_index": "userinfo",
"_type": "user",
"_id": "AWjaNVxrNTv1I7PSlAUV",
"_version": 1,
"found": true,
"_source": {
"username": "tom",
"description": "Hello World",
"password": "123"
}
}
4.6、匹配查询
get方式访问查询username=tom 的实体信息:http://127.0.0.1:9200/userinfo/user/_search?q=username:tom
response:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.2876821,
"hits": [
{
"_index": "userinfo",
"_type": "user",
"_id": "AWjaNVxrNTv1I7PSlAUV",
"_score": 0.2876821,
"_source": {
"username": "tom",
"description": "Hello World",
"password": "123"
}
}
]
}
}
4.7、模糊查询
查询 username中含有 ‘c’字母的 实体信息:http://127.0.0.1:9200/userinfo/user/_search?q=username:*c*
response:
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 1,
"hits": [
{
"_index": "userinfo",
"_type": "user",
"_id": "AWjaNbgENTv1I7PSlAUW",
"_score": 1,
"_source": {
"username": "lucy",
"description": "da mei zi",
"password": "111"
}
},
{
"_index": "userinfo",
"_type": "user",
"_id": "AWjaMyh2NTv1I7PSlAUU",
"_score": 1,
"_source": {
"username": "jack",
"description": "JAVA大菜鸡",
"password": "555"
}
}
]
}
}
4.8、删除文档
DELETE方式提交 加上要删除的实体信息的id:http://127.0.0.1:9200/userinfo/user/111
response:
{
"found": true,
"_index": "userinfo",
"_type": "user",
"_id": "111",
"_version": 2,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
}
}
ElasticSearch 的简单API调用就记录到这里,下节继续。