基本理解
索引 = 数据库
类型 = 表
文档 = 一条数据
字段 = 字段
映射 = 设计表的组成(这里不像是关系型数据库不能多加字段可以多加只是一个软规定)
ik 地址直接访问用就ok:http://182.61.52.136:5601/
进去点击DevTools 一个扳手就直接能用了练习es了 自己练习完把自己的数据清理了谢谢
elasticsearch-head地址:
http://182.61.52.136:9100/
DSL语句
查询类(select)
查询所有索引
GET /_cat/indices?v
#查询指定索引下类型下面所有内容
GET user/userinfo/_search
#查询指定索引库所有文档
GET /user/_search
#根据ID查询
GET /user/userinfo/2
#搜索排序
GET /user/_search
{
"query":{
"match_all": {}
},
"sort":{
"age":{
"order":"desc"
}
}
}
#分页实现
GET /user/_search
{
"query":{
"match_all": {}
},
"sort":{
"age":{
"order":"desc"
}
},
"from": 0,
"size": 2
}
term主要用于分词精确匹配,如字符串、数值、日期等(不适合情况:1.列中除英文字符外有其它值 2.字符串值中有冒号或中文 3.系统自带属性如_version) 相当于
select * from where city=“武汉”
#过滤查询-term
GET _search
{
"query":{
"term":{
"city":"武汉"
}
}
}
terms 过滤
terms 跟 term 有点类似,但 terms 允许指定多个匹配条件。 如果某个字段指定了多个值,那么文档需要一起去做匹配 。相当于
select * from where city=“武汉” or city=“广州”
#过滤查询-terms 允许多个Term
GET _search
{
"query":{
"terms":{
"city":
[
"武汉",
"广州"
]
}
}
}
range 过滤
range过滤允许我们按照指定范围查找一批数据。例如我们查询年龄范围
相当于
select * from where age >= 30 and age<=57
#过滤-range 范围过滤
#gt表示> gte表示=>
#lt表示< lte表示<=
GET _search
{
"query":{
"range": {
"age": {
"gte": 30,
"lte": 57
}
}
}
}
exists过滤
exists 过滤可以用于查找拥有某个域的数据
这个相当于只有这个字段 这里不是强映射仔细看下面添加就会一目了然
#过滤搜索 exists:是指包含某个域的数据检索
GET _search
{
"query": {
"exists":{
"field":"address"
}
}
}
bool 过滤
bool 过滤可以用来合并多个过滤条件查询结果的布尔逻辑,它包含一下操作符:
must : 多个查询条件的完全匹配,相当于 and。
must_not : 多个查询条件的相反匹配,相当于 not。
should : 至少有一个查询条件匹配, 相当于 or。
#过滤搜索 bool
#must : 多个查询条件的完全匹配,相当于 and。
#must_not : 多个查询条件的相反匹配,相当于 not。
#should : 至少有一个查询条件匹配, 相当于 or。
GET _search
{
"query": {
"bool": {
"must": [
{
"term": {
"city": {
"value": "深圳"
}
}
},
{
"range":{
"age":{
"gte":20,
"lte":99
}
}
}
]
}
}
}
match_all 查询
可以查询到所有文档,是没有查询条件下的默认语句。
#查询所有 match_all
GET _search
{
"query": {
"match_all": {}
}
}
match 查询
#字符串匹配
GET _search
{
"query": {
"match": {
"description": "武汉"
}
}
}
prefix 查询
以什么字符开头的,可以更简单地用 prefix ,例如查询所有以张开始的用户描述
#前缀匹配 prefix
GET _search
{
"query": {
"prefix": {
"name": {
"value": "赵"
}
}
}
}
multi_match 查询
multi_match查询允许你做match查询的基础上同时搜索多个字段,在多个字段中同时查一个
#多个域匹配搜索
GET _search
{
"query": {
"multi_match": {
"query": "深圳",
"fields": [
"city",
"description"
]
}
}
}
插入
新建映射
PUT /user/userinfo/_mapping
{
"properties": {
"name":{
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart",
"store": false
},
"city":{
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart",
"store": false
},
"age":{
"type": "long",
"store": false
},
"description":{
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart",
"store": false
}
}
}
#新增文档在user索引里面 userinfo类型里面
PUT /user/userinfo/1
{
"name":"李四",
"age":22,
"city":"深圳",
"description":"李四来自湖北武汉!"
}
#新增文档数据 id=2
PUT /user/userinfo/2
{
"name":"王五",
"age":35,
"city":"深圳",
"description":"王五家住在深圳!"
}
#新增文档数据 id=3
PUT /user/userinfo/3
{
"name":"张三",
"age":19,
"city":"深圳",
"description":"在深圳打工,来自湖北武汉"
}
#新增文档数据 id=4
PUT /user/userinfo/4
{
"name":"张三丰",
"age":66,
"city":"武汉",
"description":"在武汉读书,家在武汉!"
}
#新增文档数据 id=5 这里面美有创建address 映射(字段)却可以新增这就是不同的地方吧留着这个问题
PUT /user/userinfo/5
{
"name":"赵子龙",
"age":77,
"city":"广州",
"description":"赵子龙来自深圳宝安,但是在广州工作!",
"address":"广东省茂名市"
}
#新增文档数据 id=6
PUT /user/userinfo/6
{
"name":"赵毅",
"age":55,
"city":"广州",
"description":"赵毅来自广州白云区,从事电子商务8年!"
}
#新增文档数据 id=7
PUT /user/userinfo/7
{
"name":"赵哈哈",
"age":57,
"city":"武汉",
"description":"武汉赵哈哈,在深圳打工已有半年了,月薪7500!"
}
#我们没有创建映射也没有创建类型 但是还是新增进去了并且自动创建了索引 useraa 恶心的是没有映射应该是没得分词吧!这个有待求证会的评论下解惑
put user/useraa/1
{
"name":"李四",
"age":789789789,
"city":"深圳",
"description":"李四来自湖北武汉!"
}
修改
#更新数据,id=4 新数据替换掉旧数据
PUT /user/userinfo/4
{
"name":"张三丰",
"description":"在武汉读书,家在武汉!在深圳工作!"
}
#使用POST更新某个域的数据
POST /user/userinfo/4/_update
{
"doc":{
"name":"张三丰",
"description":"在武汉读书,家在武汉!在深圳工作!"
}
}
删除
#删除数据
DELETE user/userinfo/7
SprngbootES
SpringData介绍
Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。 Spring Data可以极大的简化JPA的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作。除了CRUD外,还包括如分页、排序等一些常用的功能。
类似 mybatiplus 不过是es版本
Spring Data的官网:http://projects.spring.io/spring-data/
官方网站:http://projects.spring.io/spring-data-elasticsearch/
依赖
<!--SpringDataES依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
</dependencies>
yml
server:
port: 18086
spring:
application:
name: search
data:
elasticsearch:
cluster-name: my-application
cluster-nodes: 192.168.211.132:9300
//2.创建查询对象 的构建对象
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
//3.设置查询的条件
nativeSearchQueryBuilder.withQuery(QueryBuilders.matchQuery("name", keywords));
//4.构建查询对象
NativeSearchQuery query = nativeSearchQueryBuilder.build();
//5.执行查询
AggregatedPage<SkuInfo> skuPage = esTemplate.queryForPage(query, SkuInfo.class);
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
//3.设置查询的条件
//设置分组条件 商品分类
nativeSearchQueryBuilder.addAggregation(AggregationBuilders.terms("skuCategorygroup").field("categoryName").size(50));
nativeSearchQueryBuilder.withQuery(QueryBuilders.matchQuery("name", keywords));
//4.构建查询对象
NativeSearchQuery query = nativeSearchQueryBuilder.build();
//5.执行查询
AggregatedPage<SkuInfo> skuPage = esTemplate.queryForPage(query, SkuInfo.class);
//获取分组结果
StringTerms stringTermsCategory = (StringTerms) skuPage.getAggregation("skuCategorygroup");
List<String> categoryList =getStringsCategoryList(stringTermsCategory);
未完成 上班草草写一下刚换工作也没空细细研究