ElasticSearch 基本使用

ElasticSearch 基本使用

elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

1. 核心概念

ES是面向文档编程,与关系型数据库的对比

DBES
数据库(database)索引(indices)
表(tables)类型(types)
行(rows)文档(document)
列(columns)字段(fields)

索引

索引是映射类型的容器,存储了映射类型的字段和其他设置,它们被存储到各个分片上,相当于mysql的数据库

类型

一个类型过去是索引的逻辑类别/分区,允许你在同一索引中存储不同类型的文档,例如,一种类型用于用户,另一种类型用于博客文章。在索引中创建多个类型不再可能,类型的整个概念将在稍后的版本中删除。相当于sql领域中表的概念

文档

一个文档是一个可以建立索引的基本单元。文档是用JSON表示的。相当于sql领域中行的概念。

节点和分片

一个集群至少有一个节点,而一个节点就是一个ElasticSearch进程,节点可以有多个索引默认的,创建索引时默认有5个分片构成,每一个分片都会有一个副本,放到不同的集群节点上进行保存,进行数据备份

倒排索引

ElasticSearch使用的是一种称为倒排索引的结构,采用Lucene倒排索引作为底层。这种结构适用于快速的全文检索,一个索引有文档中所有不重复的列表构成,对于每一个词都有一个包含他的文档列表。

2. Rest Api

ElasticSearch支持通过http请求响应服务,因此通过curl命令,可以发送http请求,并得到json返回内容

methodurl地址描述
PUTlocalhost:9200/索引名称/类型名称/文档id创建文档(指定id)
POSTlocalhost:9200/索引名称/类型名称创建文档(随机id)
POSTlocalhost:9200/索引名称/类型名称/文档id/_update修改文档
DELETElocalhost:9200/索引名称/类型名称/文档id删除文档
GETlocalhost:9200/索引名称/类型名称/文档id查询文档通过文档id
POSTlocalhost:9200/索引名称/类型名称/文档id/_search查询所有数据
2.1 新增文档
# POST 索引名称/类型名称/文档id
# 指定文档id
POST test1/type1/1
{
  "name":"张三",
  "age":18
}

# 随机文档id
POST test1/type1
{
  "name":"张三",
  "age":18
}

# 使用默认类型_doc,8.x之后将被废弃
POST test2/_doc/1
{
  "name":"张三",
  "age":18
}
2.2 新增文档数据类型映射

(1)字符串类型: text, keyword(不可被拆分)

(2)数字类型:long, integer, short, byte, double, float, half_float, scaled_float

(3)日期:date

(4)日期 纳秒:date_nanos

(5)布尔型:boolean

如果没有进行类型映射,ES会自动进行类型推断映射

# 7.x 之前版本,无法进行全索引的映射,只能对单个类型进行映射
PUT /test2
{
   "settings": {
        "number_of_shards": 3,
        "number_of_replicas": 1
    },
  "user": {
      "mappings": {
      "properties": {
        "name": {
          "type": "text",
          "analyzer":"ik_max_word"
        },
        "age": {
          "type": "long"
        },
        "birthday": {
          "type": "date"
        }
      }
    }
  }
}

# # 7.x 之后版本
PUT /test2
{
   "settings": {
        "number_of_shards": 3,
        "number_of_replicas": 1
    },
    "mappings": {
    "properties": {
      "name": {
        "type": "text",
        "analyzer":"ik_max_word"
      },
      "age": {
        "type": "long"
      },
      "birthday": {
        "type": "date"
      }
    }
  }
}

# 查看数据结构
GET test2

扩展:通过名称查询ES索引情况

GET _cat/indices?v

2.3 修改文档
# PUT 索引名称/类型名称/文档id
# 对文档数据进行覆盖操作,会导致没有写的数据丢失(不推荐)
PUT test3/_doc/1
{
  "name":"张三",
  "age":20
}

# PUT 索引名称/类型名称/文档id/_update
# 对文档进行精确修改
POST test3/_doc/1/_update
{
  "age":18
}
2.4 删除文档
#删除文档 DELETE 索引名称/类型名称/文档id
DELETE test1/type1/1
#删除索引
DELETE test1
2.5 查询文档
# 插入测试数据
# 插入查询测试数据
POST xma/user/1
{
"name": "张三",
"age": 18,
"desc": ["抽烟","喝酒","烫头"]
}
POST xma/user/2
{
  "name":"李四",
  "age":28,
  "desc":["看电视","游戏","烫头"]
}
POST xma/user/3
{
"name": "王五",
"age": 25,
"desc": ["旅游","读书"]
}
POST xma/user/4
{
"name": "赵三",
"age": 25,
"desc": ["旅游","读书"]
}
2.5.1 过滤字段:_source
# 查询指定索引所有并过滤
GET xma/user/_search
{
  "query":{
    "match_all": {
      
    }
  },
  "_source": ["desc"]
}
2.5.2 匹配查询:match
GET xma/user/_search
{
  "query": {
    "match": {
      "name": "三"
    }
  }
}
2.5.3 精确匹配:term
# 精确匹配,只有字段为keyword才能进行匹配
GET xma/user/_search
{
  "query": {
    "term": {
      "name.keyword": "张三"
    }
  }
}
2.5.4 高亮查询:highlight
GET xma/user/_search
{
  "query": {
    "match": {
      "name": "张三"
    }
  },
  "highlight": {
    "fields": {
      "name":{}
    }
  }
}

# 自定义高亮:pre_tags...post_tags...
GET xma/user/_search
{
  "query": {
    "match": {
      "name": "张三"
    }
  },
  "highlight": {
    "pre_tags": "<p color='red'>",
    "post_tags": "</p>", 
    "fields": {
      "name":{}
    }
  }
}
2.5.5 排序操作:sort
GET xma/user/_search
{
  "query": {
    "match_all": {
      
    }
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}
2.5.6 分页操作:from…size…
GET xma/user/_search
{
  "query": {
    "match_all": {
      
    }
  },
  "from": 0,
  "size": 2
}
2.5.7 多条件连接
# 条件连接 must(and)
GET xma/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "age": "25"
          }
        },
        {
          "match": {
            "name": "王五"
          }
        }
      ]
    }
  }
}

# 条件连接 should(or)
GET xma/user/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "age": "25"
          }
        },
        {
          "match": {
            "name": "王五"
          }
        }
      ]
    }
  }
}

# 条件连接 must_not(notin)
GET xma/user/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "age": "25"
          }
        },
        {
          "match": {
            "name": "王五"
          }
        }
      ]
    }
  }
}

# 条件连接 notin + 过滤:filter
GET xma/user/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "age": "25"
          }
        },
        {
          "match": {
            "name": "王五"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "gte": 20
          }
        }
      }
    }
  }
}

# 单个字段多个值匹配使用空格隔开即可(inGET xma/user/_search
{
  "query": {
    "match": {
      "desc": "头 电视"
    }
  }
}

学习地址:https://www.bilibili.com/video/BV17a4y1x7zq?p=1

Elasticsearch 是一种开源的搜索引擎,它是基于 Lucene 搜索引擎库构建的。它提供了一个分布式、多租户的全文搜索引擎,可以用于存储、搜索和分析海量数据。 以下是 Elasticsearch基本使用: 1. 安装 Elasticsearch:可以从官方网站下载 Elasticsearch,然后按照指南进行安装。 2. 运行 Elasticsearch:启动 Elasticsearch,可以在命令行中运行 elasticsearch 命令。 3. 创建索引:在 Elasticsearch 中,数据被组织成一个或多个索引。可以使用 PUT 请求创建索引,例如:`PUT /myindex`。 4. 添加文档:将文档添加到索引中,可以使用 POST 请求,例如:`POST /myindex/_doc`。在请求体中指定文档内容。 5. 查询文档:使用 GET 请求查询文档,例如:`GET /myindex/_search?q=test`。这将返回所有包含 "test" 的文档。 6. 删除文档:使用 DELETE 请求删除文档,例如:`DELETE /myindex/_doc/1`。这将删除索引为 "myindex" 中 ID 为 "1" 的文档。 7. 更新文档:使用 POST 请求更新文档,例如:`POST /myindex/_update/1`。在请求体中指定要更新的字段和值。 8. 聚合查询:可以使用聚合查询对文档进行分组和计算。例如:`GET /myindex/_search?size=0&aggs=group_by_country:terms:field:country`,这将返回按照国家分组并计算数量的结果。 以上是 Elasticsearch基本使用,还有很多高级特性可以探索。了解 Elasticsearch 的更多功能和用法,请参阅官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值