ElasticSearch 实现分词全文检索 - match、match_all、multimatch查询
目录
ElasticSearch 实现分词全文检索 - 概述
ElasticSearch 实现分词全文检索 - ES、Kibana、IK安装
ElasticSearch 实现分词全文检索 - Restful基本操作
ElasticSearch 实现分词全文检索 - Java SpringBoot ES 索引操作
ElasticSearch 实现分词全文检索 - Java SpringBoot ES 文档操作
ElasticSearch 实现分词全文检索 - 测试数据准备
ElasticSearch 实现分词全文检索 - term、terms查询
ElasticSearch 实现分词全文检索 - match、match_all、multimatch查询
ElasticSearch 实现分词全文检索 - id、ids、prefix、fuzzy、wildcard、range、regexp 查询
ElasticSearch 实现分词全文检索 - Scroll 深分页 --待发布
ElasticSearch 实现分词全文检索 - delete-by-query --待发布
ElasticSearch 实现分词全文检索 - 复合查询 --待发布
ElasticSearch 实现分词全文检索 - filter查询 --待发布
ElasticSearch 实现分词全文检索 - 高亮查询 --待发布
ElasticSearch 实现分词全文检索 - 聚合查询 cardinality --待发布
ElasticSearch 实现分词全文检索 - 经纬度查询 --待发布
ElasticSearch 实现分词全文检索 - SpringBoot 完整实现 Demo 附源码
数据准备
ElasticSearch 实现分词全文检索 - 测试数据准备
match 查询
match查询属于高层查询,他会根据你查询的字段类型不一样,采用不同的查询方式。
- 查询的是日期或者是数值的话,他会将你基于的字符串查询内容转换为日期或者数值对待。
- 如果查询的内容是一个不能被分词的内容 (keyword) ,match查询不会对你指定的查询关键字进行分词。
- 如果查询的内容时一个可以被分词的内容 (text),match会将你指定的查询内容根据一定的方式去分词,去分词库中匹配指定的内容。
match查询,实际底层就是多个term查询,将多个term查询的结果给你封装到了一起
match_all 查询
查出全部内容,不指定任何查询条件。
# match_all 查询
POST /sms-logs-index/_search
{
"query":{
"match_all": { #不指定,查出全部内容(如果数据比较多,默认只查出 10 条)
}
}
}
Java
@Test
void matchAllQuery() throws Exception{
String indexName = "sms-logs-index";
RestHighLevelClient client = ESClient.getClient();
//1. 创建Request对象
SearchRequest request = new SearchRequest(indexName);
//2. 指定查询条件
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.matchAllQuery());
builder.size(20); //ES 默认只查询10条数据,如果想查询更多,添加 Size
request.source(builder);
//3. 执行查询
SearchResponse resp = client.search(request, RequestOptions.DEFAULT);
//4. 获取到 _source 中的数据,并展示
for (SearchHit hit : resp.getHits().getHits()) {
Map<String, Object> result = hit.getSourceAsMap();
System.out.println(result);
}
}
march 查询
周末快乐 => 周末,周,末,快乐
指定 feild 做为查询条件
POST /sms-logs-index/_search
{
"query":{
"match": {
"smsContent": "周末快乐" #先分词,再查询
}
}
}


@Test
void matchQuery() throws Exception{
String indexName = "sms-logs-index";
RestHighLevelClient client = ESClient.getClient();
//1. 创建Request对象
SearchRequest request = new SearchRequest(indexName);
//2. 指定查询条件
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.matchQuery("smsContent","周末快乐"));
builder.size(20); //ES 默认只查询10条数据,如果想查询更多,添加 Size
request.source(builder);
//3. 执行查询
SearchResponse resp = client.search(request, RequestOptions.DEFAULT);
//4. 获取到 _source 中的数据,并展示
for (SearchHit hit : resp.getHits().getHits()) {
Map<String, Object> result = hit.getSourceAsMap();
System.out.println(result);
}
}
布尔match 查询
基于一个Field匹配的内容,采用 and或 or 的方式 连接
POST /sms-logs-index/_search
{
"query":{
"match": {
"smsContent":{
"query": "开心 快乐", #内容包括开心 并且 包括快乐
"operator": "and"
}
}
}
}
Java
@Test
void booleanMatchQuery() throws Exception{
String indexName = "sms-logs-index";
RestHighLevelClient client = ESClient.getClient();
//1. 创建Request对象
SearchRequest request = new SearchRequest(indexName);
//2. 指定查询条件
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.matchQuery("smsContent","开心 快乐").operator(Operator.AND)); //多个.operator(Operator.AND)
builder.size(20); //ES 默认只查询10条数据,如果想查询更多,添加 Size
request.source(builder);
//3. 执行查询
SearchResponse resp = client.search(request, RequestOptions.DEFAULT);
//4. 获取到 _source 中的数据,并展示
for (SearchHit hit : resp.getHits().getHits()) {
Map<String, Object> result = hit.getSourceAsMap();
System.out.println(result);
}
}
multi_match 查询
match 针对一个field做检索,multi_match 针对多个 field 进行检索。多个 field 对应一个text
# 布尔match 查询
POST /sms-logs-index/_search
{
"query":{
"multi_match": {
"query": "江苏", #指定 text
"fields": ["province","smsContent"] #指定field
}
}
}
Java
@Test
void multiMatchQuery() throws Exception{
String indexName = "sms-logs-index";
RestHighLevelClient client = ESClient.getClient();
//1. 创建Request对象
SearchRequest request = new SearchRequest(indexName);
//2. 指定查询条件
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.multiMatchQuery("江苏","province","smsContent"));
builder.size(20); //ES 默认只查询10条数据,如果想查询更多,添加 Size
request.source(builder);
//3. 执行查询
SearchResponse resp = client.search(request, RequestOptions.DEFAULT);
//4. 获取到 _source 中的数据,并展示
for (SearchHit hit : resp.getHits().getHits()) {
Map<String, Object> result = hit.getSourceAsMap();
System.out.println(result);
}
}
ElasticSearch 实现分词全文检索 - match、match_all、multimatch查询的更多相关文章
- ElasticSearch评分分析 explian 解释和一些查询理解
ElasticSearch评分分析 explian 解释和一些查询理解 按照es-ik分析器安装了ik分词器.创建索引:PUT /index_ik_test.索引包含2个字段:content和nick ...
- ElasticSearch中term和match探索
一.创建测试数据 1.创建一个index curl -X PUT http://127.0.0.1:9200/student?pretty -H "Content-Type: applica ...
- ElasticSearch权威指南学习(结构化查询)
请求体查询 简单查询语句(lite)是一种有效的命令行adhoc查询.但是,如果你想要善用搜索,你必须使用请求体查询(request body search)API. 空查询 我们以最简单的 sear ...
- ES 入门记录之 match和term查询的区别
ElasticSearch 系列文章 1 ES 入门之一 安装ElasticSearcha 2 ES 记录之如何创建一个索引映射 3 ElasticSearch 学习记录之Text keyword 两 ...
- ElasticSearch入门 第九篇:实现正则表达式查询的思路
这是ElasticSearch 2.4 版本系列的第九篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
- Elasticsearch 使用:创建、插入、查询、更新、删除
Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上. Lucene 可能是目前存在的,不论开源还是私有的,拥有最先进,高性能和全功能搜索 ...
- Es学习第七课, term、terms、match等基本查询语法
term.terms查询 term query会去倒排索引中寻找确切的term,它并不知道分词器的存在,这种查询适合keyword.numeric.date等明确值的 term:查询某个字段里含有某个 ...
- elasticsearch 分析器 分词器
参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenizers.html 在全文搜索(Fu ...
- ElasticSearch集成SpringData史上最全查询教程
1.简单介绍 springboot 使用springdata操作es,ElasticsearchRepository使用QueryBuilder构造查询条件 2.集成es //maven集成 < ...
- elasticsearch中的mapping映射配置与查询典型案例
elasticsearch中的mapping映射配置与查询典型案例 elasticsearch中的mapping映射配置示例比如要搭建个中文新闻信息的搜索引擎,新闻有"标题".&q ...
随机推荐
- Hbase安装(简)
1.下载hbase到服务器,解压移动到/usr/local/下 2.更改vim hbase-env.sh加入java工作目录 export JAVA_HOME=/usr/lib/jvm/java-1. ...
- 实验:STM32-ARDUINO-ESP01采用AT指令,通过MQTT连接上ONENET
1.硬件准备 要求:STM32支持Arduino. 2.程序逻辑结构 3.主流程状态机 4.测试数据抓图 5. 关键程序代码 unsigned char g_ArrTemp[1024]; int AT ...
- 「SOL」旧试题 (LOJ/SDOI)
数论+图论,妙不可言 # 题面 给定 \(A,B,C\),求: \[\sum_{i=1}^A\sum_{j=1}^B\sum_{k=1}^C\sigma_0(ijk) \] 数据规模:\(A,B,C\ ...
- maven 依赖包冲突解决
maven 查看依赖树结构命令mvn dependency:tree 1.出现下面这样冲突 omitted for duplicate 因重复而省略 2.解决-- 那个项目有问题,先注释掉,在重新一 ...
- Windows如何生成公钥和私钥
Windows如何生成公钥和私钥 方法一)使用git命令 一. 首先安装git二. 桌面上右键 Git Bash Here三. 命令ssh-keygen -t rsa然后 一直enter 四. 将公钥 ...
- 20200924--图像相似度(奥赛一本通P92 5多维数组)
给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度.说明:若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点.两幅图像的相似度定义为相同像素点数占总像素点数的百分比. ...
- .net core 接收并存储客户端上传的文件
1 文件是上传到Host,非上传到阿里云OSS 2 在Program.cs或StartUp中使用静态文件的中间件 public void Configure(IApplicationBuilder a ...
- 执行kubectl api-resources 报错error: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request
1.故障现象:error: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the serve ...
- 十大经典排序之归并排序(C++实现)
归并排序 思路:(分而治之的思想) 1.申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列: 2.设定两个指针,最初位置分别为两个已经排序序列的起始位置: 3.比较两个指针所指向的元 ...
- 记 第一次linux下简易部署 django uwsgi nginx
1.首先确定django项目是跑起来的 2.装nginx uwsgi ,网上教程一大堆 3.uwsgi的配置了 我是通过ini启动的 随意找个顺手的文件夹创建uwsgi.ini文件 我是在/home ...