ElasticSearch搜索引擎

本文详细介绍了ElasticSearch的Restful访问规则,包括PUT、POST、GET、DELETE操作,并展示了如何进行复杂搜索,如模糊查询、筛选字段、排序、分页、布尔值查询和过滤器。此外,还探讨了精确查询和高亮显示,提供了实用的示例来帮助理解。
摘要由CSDN通过智能技术生成

复杂花式搜索

文章转载至: 【狂神说Java】ElasticSearch7.6.x最新完整教程通俗易懂.
ElasticSearch本文下称ES对于大数据高并发时代的数据快速处理的方案,其提供的springBoot接口使用很方便,其专注于查询,分词,高亮,作用相当于数据库,默认存储类型为doc也就是文档

来自Restful访问规则

PUT

添加数据,也可以修改数据,但会造成数据覆盖

// kibanna
PUT /kuangshen/user/1    //访问格式/类型/id
{
	"name":"狂神说JAVA",
	"age":"23",
	"desc":"一顿操作猛如虎,还是我最叼"
	"tags":["技术宅""猛男","没对象"]
}

POST

修改数据,version对应修改, 如果词尾没有添加/_update 也会造成数据覆盖

// kibanna
POST /kuangshen/user/1/_update    //访问格式/类型/id/_update
{
	"age":"25"
}

GET

查询数据,此博客主要关注GET,最简化的为

// kibanna
GET/kuangshen/user/1   //访问格式/类型/id
// kibanna
GET/kuangshen/user/_search?q=name:"狂神"  //访问格式/类型/

DELETE

删除数据

// kibanna
DELETE kuangshen  //访问格式

属性

_score (成绩)

这个属性为默认的,作为权重使用,分值越高权重越高

_hit

索引和文档的信息,查询的结果总数,数据中的结果都可以遍历出来

构建一个数据库(类比)

// kibanna
PUT testdb    //访问格式/类型/id
{
	"mappings":{
		"properties":{
			"name":{
				"type":"text"   //指定字段类型
			},
			"desc":{
				"type":"keyword"   //指定字段类型
			}
		}
	}
}

复杂操作Select(排序、分页、高亮、模糊、精准查询)

模糊查询

name携带输入字符串的都会被查询出来,类似于LIKE

// kibanna
GET/kuangshen/user/_search    //访问格式/类型/id
{
	"query":{
		"match":{
			"name":"狂神"
		}
	}
}

筛选字段查询

对比起select * from我们更喜欢用select 字段 这时候就需要source

// kibanna
GET/kuangshen/user/_search    //访问格式/类型/id
{
	"query":{
		"match":{
			"name":"狂神"
		}
	},
	"_soure":["name","age"]
}

这样就只会查询name,age之后使用JAVA操作就是操作里面的key

排序

对比 ORDER BY

// kibanna
GET/kuangshen/user/_search    //访问格式/类型/id
{
	"query":{
		"match":{
			"name":"狂神"
		}
	},
	"sort":[
		{
			"name":{
				"order":"desc"
				}
	}
	]
}

分页

类比 limt

// kibanna
GET/kuangshen/user/_search    //访问格式/类型/id
{
	"query":{
		"match":{
			"name":"狂神"
		}
	},
	"from":0,//从第几条开始,数据下标还是从0开始
	"size":1//取几条
}

布尔值查询

must

所有条件都要符合 where id= 1 and name = xx

// kibanna
GET/kuangshen/user/_search    //访问格式/类型/id
{
	"query":{
		"bool":{
			"must":[
				{
					"match":{
							"name":"张三"
						}
				}{
					"match":{
							"age":"18"
						}
				}
			
			]
		}
	}
	
}

should

类比 or

// kibanna
GET/kuangshen/user/_search    //访问格式/类型/id
{
	"query":{
		"bool":{
			"should":[
				{
					"match":{
							"name":"张三"
						}
				}{
					"match":{
							"age":"18"
						}
				}
			
			]
		}
	}
	
}

must_not

取反must

// kibanna
GET/kuangshen/user/_search    //访问格式/类型/id
{
	"query":{
		"bool":{
			"must_not":[
				{
					"match":{
							"name":"张三"
						}
				}{
					"match":{
							"age":"18"
						}
				}
			
			]
		}
	}
	
}

过滤器filter

可以使用filter进行数据过滤

// kibanna
GET/kuangshen/user/_search    //访问格式/类型/id
{
	"query":{
		"bool":{
			"must_not":[
				{
					"match":{
							"name":"张三"
						}
				}
			]"filter":{
			  "range":{
			    "age":{
			    	"lt":10
			    }
			  }
			}
		}
	}
	
}
  • gt 大于
  • gte 大于等于
  • lt 小于
  • ite 小于等于
    在过滤器中可以使用多个进行限制

用空格隔开数据进行多条件模糊查询

// kibanna
GET/kuangshen/user/_search    //访问格式/类型/id
{
	"query":{
		
					"match":{
							"tags":"男 技术"
						}
				}
	}
	
}

匹配度越高权重越高,score越高

精确查询!

term查询是直接通过倒排索引指定的词条进程精确查找的!
关于分词:

  • term,直接查询精确的
  • match,会使用非瓷器进行解析!(线分析文档,然后在通过分析的文档进行查询)
    两个类型的key word
// kibanna
GET _analye
{
	"analyzeer":"keyword",//这个类型的搜索,不会将下边的字符串分割为"狂" "神"
	"text":"狂神说 JAVA" 
	
}
// kibanna
GET _analye
{
	"analyzeer":"standard",//这个类型的搜索,会将下边的字符串分割为"狂" "神"
	"text":"狂神说 JAVA" 
	
}

term

// kibanna
GET/kuangshen/user/_search    //访问格式/类型/id
{
	"query":{
		
					"term":{
							"name":"狂" //name带狂的
						}
				}
	}
	
}

keyword类型不会被解析

高亮!

// kibanna
GET/kuangshen/user/_search    //访问格式/类型/id
{
	"query":{
		"match":{
			"name":"狂神"
		}
		}"highlight":{
			"fields":{
				"pre_tags":"<p class='key' style='color:red'>",//结果前html
				"post_tags":"</p>"//结果后html
				"name":{}
			}
		}
	}
	
}

其实MYSQL可以做但是效率没有这么高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值