上一篇我们已经安装好了es+kibana
这里我们将简单的说一下增删查的使用
solr和elasticsearch区别:
1、solr创建索引库慢、查询快 ||||||||||| elasticsearch创建索引快、查询慢
2、elasticsearch支持分布式,solr可以使用zookeeper做分布式
elasticsearch概念:
node:节点,部署服务的服务器
cluster:集群, 多个节点组成的架构
index: 索引库,相当于关系数据库中的database
shards:索引分片数,默认为5
replicas:索引副本,默认为1
type:索引类型,相当于关系数据库中的table
document:文档,相当于关系数据库中的row
_index:文档对应的索引
_type: 数据类型
_id: 文档的唯一标识
elasticsearch请求方式:
GET: 查询数据
POST: 查询数据、新增数据、修改数据
PUT: 新增数据、修改数据
DELETE:删除数据
数据类型
设置index 插入数据
PUT estest1
{
"settings": {
"number_of_replicas": 1,
"number_of_shards": 5
},
"mappings": {
"user":{
"properties": {
"id":{
"type": "long"
},
"name":{
"type": "text",
"analyzer": "standard"
},
"age":{
"type": "long"
}
}
}
}
}
DELETE estest1
PUT estest1/user/1
{
"id":2,
"name":"张三",
"age":30
}
post estest1/user
{
"id":1,
"name":"张4",
"age":40
}
GET estest1/_search
修改数据需要指定数据的id
PUT estest1/user/1
{
"name":"update"
}
查询全部索引
GET _cat/indices
查询
分为过滤查询:bool+filter查询匹配,但是不打分,多为精准查询
匹配查询:使用match,打分机制,0-1
range子句 作用于数字范围查询 get大于 let小于
GET estest1/user/_search
{
"query": {
"range": {
"age": {
"gte": 20,
"lte": 40
}
}
}
}
组合查询:同时多个字段进行匹配检索,使用bool子句:
must:必须符合条件,(肯定包含)
must_not:必须不匹配什么条件(肯定不包含)
should:文档符合条件的将添加score得分,
filter:使用过滤来查询
分页参数(与query同级)
from:分页开始位置
size:分页大小
中文分词器
中文分词我们使用的都是ik_max_word 也就是最大粒度的分词
我们来测试一下啊
POST _analyze
{
"analyzer": "ik_max_word",
"text": "中华人民共和国"
}
结果
{
"tokens": [
{
"token": "中华人民共和国",
"start_offset": 0,
"end_offset": 7,
"type": "CN_WORD",
"position": 0
},
{
"token": "中华人民",
"start_offset": 0,
"end_offset": 4,
"type": "CN_WORD",
"position": 1
},
{
"token": "中华",
"start_offset": 0,
"end_offset": 2,
"type": "CN_WORD",
"position": 2
},
{
"token": "华人",
"start_offset": 1,
"end_offset": 3,
"type": "CN_WORD",
"position": 3
},
{
"token": "人民共和国",
"start_offset": 2,
"end_offset": 7,
"type": "CN_WORD",
"position": 4
},
{
"token": "人民",
"start_offset": 2,
"end_offset": 4,
"type": "CN_WORD",
"position": 5
},
{
"token": "共和国",
"start_offset": 4,
"end_offset": 7,
"type": "CN_WORD",
"position": 6
},
{
"token": "共和",
"start_offset": 4,
"end_offset": 6,
"type": "CN_WORD",
"position": 7
},
{
"token": "国",
"start_offset": 6,
"end_offset": 7,
"type": "CN_CHAR",
"position": 8
}
]
}
一个小测试
我们以 "中华人民共和国"为例 分别添加 中华1,中华 ,中华人名共和国三条数据
7.5.2版本中
PUT estest
{
"settings": {
"number_of_replicas": 1,
"number_of_shards": 1
}
, "mappings": { #mapping内不写表名
"properties": {
"id":{
"type": "long"
},
"name":{
"type": "text",
"analyzer": "standard"
}
}
}
}
POST estest/_doc/2 #没有表名用_doc
{
"id":2,
"name":"张1"
}
GET estest/_search
DELETE estest
HEAD estest
GET estest/_search #查询上嵌套与6有很大区别
{
"query": {
"range": {
"id": {
"gte": 1,
"lte": 2
}
}
}
}
以XXX开头的
GET es/es/_search
{
"query": {
"prefix": {
"字段": {
"value": "漓江"
}
}
},
"_source": "字段"
}