ElasticSearch 01 基础概念及基本操作
ElasticSearch 02 与SpringBoot2.x集成进行增删改查
ElasticSearch 03 全文检索功能实现
一、 基础概念
-
index
:是ES的顶层管理单位,相当于一个数据库。查看所有索引的命令:GET 'http://localhost:9200/_cat/indices'
-
type
:index里的虚拟的逻辑分组,类似于一个表用来过滤 Document(ES7.0被去掉)。 -
document
: Index 里面单条的JSON
格式记录称为 Document(文档),许多条 Document 构成了一个 Index。
- 分片:每个索引都有多个分片,每个分片是一个Lucene索引
- 备份:复制一个分片就完成了分片的备份
- API基本格式:
http://<ip>:<port>/<索引><类型><文档id>
- 常用HTTP动词:
GET/PUT/POST/DELETE
索引的基本操作
- 创建索引
PUT 127.0.0.1:9200/people
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
},
"mappings": {
"man": {
"properties": {
"name": {
"type":"text"
},
"country": {
"type":"keyword"
},
"age": {
"type":"integer"
},
"date": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
},
"worman": {}
}
}
- 删除索引
DELETE 127.0.0.1:9200/people
- 插入数据
PUT localhost:9200/people/man/1
{
"name": "瓦力",
"country": "China",
"age": "26",
"date": "1999-01-02"
}
使用POST可以省略id 1,让系统自动生成一个字符串id
- 修改数据
POST localhost:9200/people/man/1/_update
{
"doc": {
"name": "我是瓦力"
}
}
- 删除数据
DELETE 127.0.0.1:9200/people/man/1
- 查询ES信息
curl -Xget localhost:9200
- 查询索引信息
curl -Xget localhost:9200/book?pretty=true
- 全文搜索
POST 127.0.0.1:9200/_search
- 查询指定索引的所有记录
POST 127.0.0.1:9200/book/_search
- 查询指定id的记录信息
GET 127.0.0.1:9200/book/novel/1
- 给非结构化索引book添加类型和映射
POST 127.0.0.1:9200/book/novel/_mappings
{
"novel": {
"properties": {
"title": {
"type": "text"
}
}
}
}
关键词_mappings 添加映射
novel 类型前缀
高级查询
- 一、子条件查询:特定字段查询所指特定值
1、Query context:ES会计算一个_score
来表示匹配的程度,旨在判断目标文档和查询条件匹配的有多好
。
1.1、全文本查询:针对文本类型数据的查询,包含模糊匹配、短语匹配、多字段匹配、语法查询
模糊匹配:关键词match
127.0.0.1:9200/book/_search
{
"query": {
"match":{
"author":"金庸"
}
}
}
习语/短语匹配:关键词match_phrase
127.0.0.1:9200/book/_search
{
"query": {
"match_phrase":{
"author":"java入门"
}
}
}
多字段匹配:关键词multi_match
127.0.0.1:9200/book/_search
{
"query": {
"multi_match":{
"author":"金庸",
"fields":["auth","title"]
}
}
}
语法匹配:关键词query_string
127.0.0.1:9200/book/_search
{
"query": {
"query_string":{
"query":"(java AND good) OR Python",
"fields": ["title", "author"]
}
}
}
字段级别查询:针对结构化数据,如数字,日期等
语法匹配:关键词term
127.0.0.1:9200/book/_search
{
"query": {
"term":{
"author":"古龙"
}
}
}
字段级别的范围查询
127.0.0.1:9200/book/_search
{
"query": {
"range":{
"word_count": {
"gte": 1000,
"lte": 2000
}
}
}
}
2、Filter context ,只判断是否满足条件,只有yes或no; 会对结果进行缓存,速度较快
127.0.0.1:9200/book/_search
{
"query": {
"bool":{
"filter": {
"term": {
"word_count": 1000
}
}
}
}
}
- 二、复合条件查询:以一定的逻辑组合子条件查询
-
二、索引
索引名规范
仅限小写字母
- 不能包含\、/、 *、?、"、<、>、|、#以及空格符等特殊符号
- 从7.0版本开始不再包含冒号
- 不能以-、_或+开头
- 不能超过255个字节(注意它是字节,因此多字节字符将计入255个限制)
索引配置
PUT blog
{
"settings" : {
"index" : {
"number_of_shards" : 2,
"number_of_replicas" : 2
}
}
}
或:
PUT blog
{
"settings" : {
"number_of_shards" : 2,
"number_of_replicas" : 2
}
}
索引操作
- 命令新增一条索引:
curl -X PUT localhost:9200/user
- 查询索引:
curl -X GET localhost:9200/user
?pretty=true 是用来美化输出的json内容格式,可以添加在user后
- 删除索引:
curl -X DELETE localhost:9200/user
- 返回当前节点的索引索引:
curl -X GET http://localhost:9200/_cat/indices?v
.kibana_1是Kibana自带样例索引
- 查看索引配置:
curl -X GET localhost:9200/blog/_settings?pretty=true
- 关闭索引:
curl -X POST localhost:9200/blog/_close
- 关闭索引:
curl -X POST localhost:9200/blog/_open
索引的种类
- 非结构化索引
mappings为空就是非结构话索引
- 结构化索引
mappings:{}不为空的索引
三、文档
文档使用json格式表示:
curl -X PUT localhost:9200/megacorp/employee/1' -d
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}'
megacorp:索引名称
employee:类型名称(ES7不支持type?)
1:特定雇员的ID
curl命令 发送表单信息有 GET 和 POST 两种方法。默认为GET方法 ,只要把数据附在网址后面就行
curl example.com/form.cgi?data=xxx
。POST 方法必须把数据和网址分开,curl 要用到 --data 或者 -d 参数。curl 默认的 HTTP 动词是 GET,使用 -X 参数可以支持其他动词。curl -X POST -d "data=xxx" www.example.com/form.cgi
GET和POST或DELETE等动词必须大写。
- 查看一个文档:
Get 'http://localhost:9200/film/dongzuo/1
- 删除一个文档:
DELETE 'http://localhost:9200/film/dongzuo/1
网友评论