##################################################################           查询名字中有王  且   过滤  筛选中age>10岁的
GET wang/user/_search
{"query": {"bool": {"must": [{"match": {"name": "王"}}],"filter": {"range": {"age": {"gt": 10}}}}}
}
####        gt大于    gte大于等于 lt小于    lte小于等于
GET wang/user/_search
{"query": {"bool": {"must": [{"match": {"name": "王"}}],"filter": {"range": {"age": {"gte": 10,      #大于等于10岁"lt": 26      #小于26岁}}}}}
}

匹配多个搜索条件

###################################################################    多个条件查询
####        含有渣的都会被搜索出来,只要满足一个结果就可以查出来
###     渣男渣女都能查出来       两个都符合  分数比较高,权重高
###     多个条件 空格隔开
GET wang/user/_search
{"query": {"match": {"tags": "渣 技术"}}
}

精确查询

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

关于分词:

  • 直接查询精确的
  • match 会使用分词器去解析(先分析文档,然后在通过分析的文档进行查询)

那我们要了解我们有两个类型的数据是text,keyword

怎么理解呢

###################################################################      创建索引数据库
PUT testdb
{"mappings":{"properties": {"name":{"type": "text"        #name是text类型},"desc":{"type":"keyword"        #desc是keyword类型}}}
}
#############       存放数据
PUT testdb/_doc/1
{"name":"狂神说Java name","desc":"狂神说Java desc"
}
PUT testdb/_doc/2
{"name":"狂神说Java name","desc":"狂神说Java desc2"
}
########        查找
GET _analyze
{"analyzer": "keyword","text": "狂神说Java name"   #如果是keyword,就不会拆分
}
GET _analyze
{"analyzer":"standard", #普通类型则会拆分  被拆分成了一个个字"text": "狂神说Java name"
}########       复杂查询测试
GET testdb/_search
{"query": {"term": {"name": "狂"}}
}           ###     结果会被查询出来,因为上面的name是text类型,会被分             词器解析,只要包含这个字,就能查出来
#   desc是keyword   那我搜他的子句能搜到么
GET testdb/_search
{"query": {"term": {"desc": "狂神说Java desc"}}
}       ##只有1条数据出来了 狂神说Java desc2 没有被查出来

因此得出我们的结论,类型为keyword的字段是不会被分词器解析的

多个值匹配的精确查询

######       构造数据
PUT testdb/_doc/3
{"t1":"22","t2":"2020-12-04"
}
PUT testdb/_doc/4
{"t1":"33","t2":"2019-12-04"
}
#####   多条件精确查询
GET testdb/_search
{"query": {"bool": {"should": [       #有{"term": {"t1":"22"         }},{"term": {"t1":"33"}}]}}
}
22  33都能被查出来        精确查询t1=22 或 33的文档

高亮查询

##########  高亮显示
GET wang/user/_search
{"query": {"match": {"name": "小王"}},"highlight": {"fields": {"name":{}}}
}
##########  展示部分结果
"hits" : [{"_index" : "wang","_type" : "user","_id" : "1","_score" : 1.8534994,"_source" : {"name" : "小王同学","age" : 23,"desc" : "一顿操作猛如虎,一看工资2500","tags" : ["技术宅","帅气","宅男"]},"highlight" : {"name" : ["<em>小</em><em>王</em>同学"       #高亮被em包裹起来]}

我想自己设置高亮怎么做

上述代码改进

######       自定义高亮条件
GET wang/user/_search
{"query": {"match": {"name": "小王"}},"highlight": {"pre_tags": "<p class='key' style='color:red'>", "post_tags": "</p>", "fields": {"name":{}}}
}
######      部分结果"_index" : "wang","_type" : "user","_id" : "1","_score" : 1.8534994,"_source" : {"name" : "小王同学","age" : 23,"desc" : "一顿操作猛如虎,一看工资2500","tags" : ["技术宅","帅气","宅男"]},"highlight" : {"name" : ["<p class='key' style='color:red'>小</p><p class='key' style='color:red'>王</p>同学"    #已被包裹]}

Spring Boot集成

导入依赖 原生依赖

<dependency><groupId> org.elasticsearch.client </ groupId><artifactId > elasticsearch -rest-high-level-client </ artifactId> <version> 7.6.2 </ version>
</ dependency>

初始化 对象

//第一步 构建一个RestHighLevelClient
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http"),new HttpHost("localhost", 9201, "http")));
//单机即new HttpHost一个就行
//用完一定要关闭
client.close();

配置基本项目

一定要保证我们导入的版本和我们的ES版本一致

    <properties><java.version>1.8</java.version>
<!--      自定义版本依赖--><elasticsearch.version>7.6.1</elasticsearch.version></properties>

关于索引的API操作

@SpringBootTest
class WangEsApiApplicationTests {@Autowiredprivate RestHighLevelClient restHighLevelClient;
///     索引相关操作//测试索引的创建  Request@Testvoid testCreateIndex() throws IOException {//1.创建索引请求CreateIndexRequest request = new CreateIndexRequest("wang_index");//2.执行创建请求CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);System.out.println(createIndexResponse);//我们的head会出现wang_index索引库}//测试是否存在索引库        只能判断存不存在@Testvoid testExitstIndex() throws IOException {GetIndexRequest request = new GetIndexRequest("wang_index");boolean exists = restHighLevelClient.indices().exists(request,RequestOptions.DEFAULT);System.out.println(exists);}//删除索引void testDeleteIndex() throws IOException {DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("wang_index");AcknowledgedResponse delete = restHighLevelClient.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);System.out.println(delete.isAcknowledged());//结果显示true代表成功删除}}

关于文档的操作

//模拟实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class User {private String name;private int age;
}
/           测试文档操作@Test//测试添加文档void testAddDocument() throws IOException {//创建对象User user = new User("小王同学",3);//创建请求IndexRequest request = new IndexRequest("wang_index");//指定我们的规则request.id("1");request.timeout(TimeValue.timeValueSeconds(1));request.timeout("1s");//将我们的数据放入请求request.source(JSON.toJSONString(user), XContentType.JSON);//客户端发送请求IndexResponse indexResponse = restHighLevelClient.index(request, RequestOptions.DEFAULT);System.out.println(indexResponse.toString());System.out.println(indexResponse.status());}
//测试文档是否存在@Testvoid testIsExists() throws IOException {GetRequest getRequest = new GetRequest("wang_index","1");//不获取返回的_source的上下文getRequest.fetchSourceContext(new FetchSourceContext(false));boolean exists = restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);System.out.println(exists);//    返回True}@Test//测试获取文档void testGetDocument() throws IOException {GetRequest getRequest = new GetRequest("wang_index", "1");GetResponse documentFields = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);System.out.println(documentFields.getSourceAsString());System.out.println(documentFields);//这里打印的全部内容跟我们的命令是一样的}@Test//测试update文档void update() throws IOException {UpdateRequest request = new UpdateRequest("wang_index", "1");request.timeout("1s");User user = new User("王公子", 18);request.doc(JSON.toJSONString(user),XContentType.JSON);UpdateResponse update = restHighLevelClient.update(request, RequestOptions.DEFAULT);System.out.println(update.status());System.out.println(update.toString());}@Test//测试删除文档void testDelete() throws IOException {DeleteRequest request = new DeleteRequest("wang_index", "1");request.timeout("1s");DeleteResponse delete = restHighLevelClient.delete(request, RequestOptions.DEFAULT);System.out.println(delete.status());System.out.println(delete.toString());}

测试大批量放入请求

@Test
//批量导入数据
void
testBulkRequest() throws IOException {BulkRequest bulkRequest = new BulkRequest();bulkRequest.timeout("10s");ArrayList<User> users = new ArrayList<>();users.add(new User("wang",12));users.add(new User("王",43));users.add(new User("涛",33));users.add(new User("涛涛",13));users.add(new User("诸葛",53));users.add(new User("猪哥",13));users.add(new User("涛1",43));users.add(new User("小王2",33));users.add(new User("wang1",23));users.add(new User("wang2",33));users.add(new User("wang3",93));for (int i = 0; i <users.size() ; i++) {bulkRequest.add(new IndexRequest("wang_index").id(""+(i+1))   //不写id的话我们会生成随机的id.source(JSON.toJSONString(users.get(i)),XContentType.JSON));}BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);System.out.println(bulk.hasFailures());//测试是否失败
}
@Test//测试查询//SearchRequest     搜索请求//SearchSourceBuilder   搜索条件构造//HighlightBuilder        构建高亮// TermQueryBuilder     精确查询构造//MatchAllQueryBuilder        全部条件构造//xxxxQueryBuilder        对应我们看到的所有命令void testSelect() throws IOException {SearchRequest request = new SearchRequest("wang_index");//构建搜索条件SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//查询条件,我们可以使用QueryBuilders工具类来实现//QueryBuilders.termQuery精确匹配//QueryBuilders.matchAllQuery()查询所有TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name","涛");searchSourceBuilder.query(termQueryBuilder);//设置分页searchSourceBuilder.from(0);searchSourceBuilder.size(3);searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));request.source(searchSourceBuilder);SearchResponse search = restHighLevelClient.search(request, RequestOptions.DEFAULT);System.out.println(JSON.toJSONString(search.getHits()));//遍历for (SearchHit documentFields : search.getHits().getHits()) {System.out.println(documentFields);}}
//测试高亮在我们的实战中测试

ElasticSearch学习笔记(二)相关推荐

  1. ElasticSearch学习笔记(二)—结构了解和索引文档增删改

    前面学习了ElasticSearch的概况以及一些配套插件的安装.这篇旨在记录对ES结构的了解和一些基本的操作. ElasticSearch结构: 对于ES来说,有几个专有名词.比如索引,类型,id这 ...

  2. 2018/2/11 ELK技术栈之ElasticSearch学习笔记二

    终于有时间记录一下最近学习的知识了,其实除了写下的这些还有很多很多,但懒得一一写下了: ElasticSearch添加修改删除原理: ElasticSearch的倒排索引和文档一旦生成就不允许修改(其 ...

  3. ElasticSearch学习笔记二 初识Elasticsearch

    初识Elasticsearch Elasticsearch简介 Elasticsearch术语及概念 文本(Text) 索引词/精确值(term) 精确值 VS 全文 分析(Analysis)与分析器 ...

  4. elasticsearch学习笔记——二.querystring查询document方式与dsl查询document方式

    // 1.创建test_serach索引,指定主要分片数量,副本分片数量,文档中字段的数据类型,分词器,是否作为搜索条件 PUT test_search { "settings": ...

  5. ElasticSearch学习笔记之二十一 指标聚合

    ElasticSearch学习笔记之二十一 指标聚合 指标聚合 Avg Aggregation Script Value Script Missing value Weighted Avg Aggre ...

  6. ElasticSearch学习笔记之十一 Anayle API和IK分词器

    ElasticSearch学习笔记之十一 Anayle API和IK分词器 Anayle API IK分词器 IK分词器版本支持 安装 下载或者编译 选择一 选择二 重启ElasticSearch I ...

  7. 码匠社区学习笔记(二)

    所需资料 教程视频地址 Bootstrap spring模板 elasticsearch中文社区(想模仿的效果) 码云aAuth 获取授权用户的资料 github第三方授权文档 码匠社区学习笔记(二) ...

  8. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...

  9. [转载]dorado学习笔记(二)

    原文地址:dorado学习笔记(二)作者:傻掛 ·isFirst, isLast在什么情况下使用?在遍历dataset的时候会用到 ·dorado执行的顺序,首先由jsp发送请求,调用相关的ViewM ...

  10. PyTorch学习笔记(二)——回归

    PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...

最新文章

  1. 一文理清集成学习知识点(BoostingBagging)
  2. 【Python学习系列六】Python语言基本语法
  3. Ubuntu 使用Git 使用
  4. ASP.NET页面对象模型:Page类介绍
  5. Java实现心跳机制
  6. bigdecimal如何做除法_二胎家庭如何平衡两个孩子的关系?聪明的父母都懂这四个法则...
  7. 2d游戏地图编辑器_从零开始的unity(3)——2d背景的制作和使用
  8. 因为计算机丢失user32.dll,无法启动程序,说是计算机丢失user32.dll
  9. PCB板材的分类和介电常数
  10. 盘点:12个超炫数据可视化工具
  11. vb/vb.net开发技巧荟萃(九)
  12. 移动端应该如何动态设置字体大小?
  13. 基于tkinter+win32+pynput实现python的QQ微信刷屏(比某些文章稍微高级一点)
  14. 电脑网站如何用支付宝收款(php)
  15. 小南再谈Vue(QA)
  16. 注册中心对比Zookeeper、Eureka、Nacos、Consul和Etcd
  17. 解决java.lang.IllegalArgumentException
  18. 最近 Github 上爆火的 Chrome 生产力神器 Omni 是什么鬼?
  19. 使用linux 中的 tree 指定显示深度,显示文件目录结构
  20. 建筑卫生陶瓷行业中国驰名商标新增10件

热门文章

  1. java改变this指向_[Java教程]JavaScript中的this指向
  2. exxi6.7如何传文件到win7_win7系统被删除文件如何恢复 恢复被删除的文件操作方法【详解】...
  3. Java基础:Lambda表达式
  4. SQL:postgresql中st_union合并多条geom数据
  5. java扫码盒_[腾讯 TMQ] JAVA 代码覆盖率工具 JaCoCo-实践篇
  6. Java基础学习(1)-反射
  7. 深度学习笔记_基本概念_卷积网络中的通道channel、特征图feature map、过滤器filter和卷积核kernel
  8. 【一天一个C++小知识】004.C++中内部链接和外部链接
  9. 《Cascade R-CNN: Delving into High Quality Object Detection》论文解析
  10. C++类的静态成员函数普通成员函数