索引和类型的创建:
在创建索引的时候,我们会一起创建类型,且索引和类型创建完成后无法进行修改,所以才创建的时候需要注意
语法规则:
put /sec_01
{
"settings":{
"number_of_shards": 3,
"number_of_replicas": 2
},
"mappings":{
"type 名称":{
"properties":{
"字段 1 名称":{
"type":"字段 1 类型",
"analyzer":"分词器类型"
},
"字段 2 名称":{
"type":"字段 2 类型"
"analyzer":"分词器类型"
}
}
}
}
}
修改文档:修改文档时,只需要改变文档的值就可以了,属性名不能改变,否则的话进是添加文档了,语法规则:与新增文档一样,只是修改时吧原来的数据替换掉了
删除文档:类型名创建是与索引一起创建的,所以在删除文档时必须跟id,不跟id的话是无法进行删除的,且无法删除类型名,语法规则:DELETE /索引名称/类型名称/文档 ID
DELETE sec_01/user/02
新增文档:新增文档没有语法要求,语法规则:PUT /索引名称/类型名称/文档 ID{“字段名”:“值”}
分词器的使用
分词器在ES中默认提供了四个,standard、simple、whitespace、language,同时可以进行手动设置分词器
指定索引、类型查询:按照指定的索引(index)、类型(type)进行数据查询
通过GET语句和_search语句获取,书写没有要求,语句规则:GET /索引名称/类型名称/_search
GET sec_01/user/_search
请求体查询:
请求体查询是使用的了单个或者多个查询子语句进行都数据的查询,标志为query,其类型有两种,一是过滤查询,二是匹配查询
过滤查询通常使用 filter+term 子句来实现(必须写在bool语句中)
匹配度查询通常使用 macth 子句实现(可书写在bool语句的子句中,也可直接使用)
bool语句的作用;
bool语句中包含了多个子语句,且同时每一个子语句中度可以嵌套其他的子语句
书写在bool中的语句相当于mysql中语句中的or,满足一个条件就可以获取到与条件匹配的数据
bool语句中的子语句;
must:文档中必须包含此内容才能获取匹配
must_not:文档中不包含此内容才能获取匹配
should:给每一个查询结果进行评分,没有则不响应
filter:过滤模式语句,对评分不影响只是相当与mysql中的where条件
注意:每一个bool字句必须与bool进混合使用,不能书写在bool语句外面
查询子句:
match:标准查询,可直接书写在query语句中,按匹配度进行排序结果,相当于mysql中的like模糊查询
term:精准查询,可直接书写在query语句中亦可用于 filter 子句,相当于mysql中的where条件查询,通常使用数字,时间等值作为条件,如果条模糊的,
也可获取的模糊情况下的数据与match一样
range:区域查询,类似于mysql中的大于、小于判断。range 查询可用于 query 子句,也可用于 filter 子句。gte大于等于、lte小于等于、gt大于、lt小于
注意:在使用使用混合查询时,必须在bool语句中添加bool的子句才能进行书写查询字句,不能直接套用
分页查询:分页查询类似于mysql中的limit,直接书写与query语句之前,使用from标注起始位置,size标注显示数据条数
设置请求时长:请求时长为在查询数据过大时,为了提高用户的体验度,通过设置请求时长,将一部分数据返回给前端,当用户再次发送请求时,再次没有
获取到的数据,通过设值timed_out:timed_out 值表示查询是否超时。默认情况下,搜索请求不会超时。
语句书写规则:GET /_search?timeout=超时时间(如 10ms)(timeout 常见类型有三种,分别为 ms(毫秒)、s(秒)、m(分钟))
查询所有数据和数据格式
GET _search
{
"query": {
"match_all": {}
}
}
创建索引
PUT dmservice
{
"settings": {
"number_of_shards": 5
, "number_of_replicas": 0
},
"mappings": {
"user":{
"properties": {
"name":{
"type": "text"
}
}
}
}
}
包含查询
GET leon_01/_search
{
"query": {
"match": {
"name":"乔峰"
}
添加数据
PUT /sec_01/user/01
{
"name":"李师师 ",
"age":"18"
}
bool字句中的filter与term混合查询
GET leon_01/user/_search
{
"query": {
"bool": {
"filter": {
"term": {
"sex": "0"
}
}
}
}
}
match查询
GET leon_01/user/_search
{
"query": {
"match": {
"name": "李"
}
}
}
多条件的条件体查询
GET leon_01/user/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"address":"D"
}
},
{
"match": {
"name":"李"
}
}
],
"filter": {
"term": {
"sex": "1"
}
}
}
}
}
区域查询
GET leon_01/user/_search
{
"query": {
"bool": {
"must": [
{
"range": {
"age": {
"gte": 10,
"lte": 20
}
}
}
]
}
}
}
多字句查询(例子中的查询语句类似于mysql中的or查询)查询北京或者上海的男生,年龄在10到20岁
GET leon_01/user/_search
{
"query": {
"bool": {
"must": [
{
"range": {
"age": {
"gte": 10,
"lte": 20
}
}
},
{
"match": {
"sex": "1"
}
},
{
"bool": {
"should": [
{
"match": {
"address": "北京"
}
},
{
"match": {
"address": "上海"
}
}
]
}
}
]
}
}
}
term:精准查询,可直接书写在query语句中,相当于mysql中的where条件查询
GET leon_01/user/_search
{
"query": {
"term": {
"name": {
"value": "李"
}
}
}
}
分词器的使用
GET _analyze
{
"text": ["长沙经济开发区东十路南9号"],
"analyzer": "ik_max_word"
}
GET hui_05/user/_search