持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情
简介
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。
特性
- 可拓展性:部署大型分布式集群(数百台服务器)技术处理PB级数据。
- 技术整合:将全文检索、数据分析、分布式相关技术整合在一起,也可以结合商用的数据分析软件 (BI软件)和分布式数据库(mycat)
- 部署简单:开箱即用,很多默认配置不需关心,解压完成直接运行即可。拓展时,只需多部署几个实例即可,负载均衡、分片迁移集群内部自己实施。
- 接口简单:使用Restful Api跨语言,操作简单。
- 功能强大: Elasticsearch作为传统数据库的一个补充,提供了全文检索,同义词处理,相关度排名的特殊功能。
应用场景
- 关键字和全文检索
- 海量数据进行近实时的处理,对复杂的日志进行分析
- 数据量很大,又需要各种条件查询,实时的返回查询数据结果
- 相似搜索,模糊匹配,地理位置聚合等
安装
下载安装包
点击链接 www.elastic.co/cn/download… 进入官网,下载对应的Elasticsearch版本。
安装中文分词插件
在安装es/bin的目录的下执行 elasticsearch-plugin install github.com/medcl/elast… 在线安装中文分词
启动
安装成功后,运行 ES安装目录\bin\elasticsearch.bat文件,访问http://localhost:9200 如果出现如下内容,则表示ES安装成功。
说明:安装ES的版本为7.2.0.
ES的常用命令
创建索引
采用put创建索引
基本语法
PUT /{index}/{type}/{id}{
"field": "value",
...}
请求示例
http://localhost:9200/product/book/1
{
"skuNo":"p0001",
"title":"三国演义",
"price":"99.9"
}
返回信息
{
"_index": "product",
"_type": "book",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
说明:
- _index:索引名称
- _type:类型
- _id :ID 是一个字符串,当它和 _index 以及 _type 组合就可以唯一确定 Elasticsearch中的一个文档。
- _version :版本号,当进行修改时,版本会新增
- result :类型创建或者修改
查询索引所有信息
请求示例
http://localhost:9200/product/_mapping?pretty
返回信息
{
"product" : {
"mappings" : {
"properties" : {
"price" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"skuNo" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"title" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
}
说明:返回索引创建的详细信息
关键字检索
请求示例
http://localhost:9200/_search?pretty
{
"query":
{
"match":
{
"title":"java"
}
}
}
返回信息
{
"took": 351,
"timed_out": false,
"_shards": {
"total": 6,
"successful": 6,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 2,
"relation": "eq"
},
"max_score": 1.0064771,
"hits": [
{
"_index": "product",
"_type": "book",
"_id": "2",
"_score": 1.0064771,
"_source": {
"skuNo": "p0002",
"title": "java编程",
"price": "99.8"
}
},
{
"_index": "product",
"_type": "book",
"_id": "3",
"_score": 0.8292111,
"_source": {
"skuNo": "p0002",
"title": "java并发编程",
"price": "99.8"
}
}
]
}
}
说明:检索字段为title,内容为java,查询中title中包含java的所有数据。
- took:是查询花费的时间,毫秒单位。
- time_out:标识查询是否超时。
- _shards:描述了查询分片的信息,查询了多少个分片、成功的分片数量、失败的分片数量等。
- hits:搜索的结果,total是全部的满足的文档数目,hits是返回的实际数目(默认是10)。
- _score是文档的分数信息,与排名相关度有关,参考各大搜索引擎的搜索结果,就容易理解。
- total:1;(代表当前ES里总数只有一条数据,不管你发送任何请求,ES都会把总数返回)
- _index:我们指定查询的索引(类似数据库的某个库)。
- _type:我们指定查询的文档(类似数据库的某张表)
- _id:查询指定的id。
- _source:查询返回数据。
删除索引
请求示例
DELETE http://localhost:9200/product/book/2
返回结果
{
"_index": "product",
"_type": "book",
"_id": "2",
"_version": 2,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 5,
"_primary_term": 1
}
高级查询
基本语法
GET /索引名称/_search
{
"query":{
"查询类型":{
"查询条件":"查询条件值"
}
}
}
查询类型:match_all,match,term,range match类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是or的关系.
条件查询
{
"query":
{
"match":
{
"title":
{
"query":"java",
"operator":"and"
}
}
}
}
多字段查询
{
"query":
{
"multi_match":
{
"query":"java",
"fields":["title","skuNo"]
}
}
}
说明: multi_match:多字段查询,fields:设置字段的名称。
对于其他的词条查询,范围匹配、排序、模糊查询等特性就不一一举例说明了。
总结
本文知识简单介绍了Elasticsearch入门级的应用,关于Elasticsearch的原理和高级特性将在后续的文章中进行讲解。