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 ... 
随机推荐
- 错题笔记:只有浮点型float double可以装小数
			char是不能表示小数的,如果赋值小数 则小数部分直接省略. 
- flutter-linux(未完成)
			运行命令 flutter run -d linux --no-sound-null-safety 打包(build/linux/x64/release/bundle/) flutter build l ... 
- HTML实战:个人信息登记表
			效果展示: 代码示例: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ... 
- mysql安装及可视化界面
			Mysql下载安装 官网下载链接 https://dev.mysql.com/downloads/mysql/ 可以选择之前的版本 我一开始下的8.0.21但安装的时候报错说找不到VCRUNTIME1 ... 
- vue后台管理系统
			1. 项目概述: 根据不同的应用场景,电商系统一般都提供了 PC 端.移动 APP.移动 Web.微信小程序等多种终端访问方式. 2. 电商后台管理系统的功能 电商后台管理系统用于管理用户账号.商品分 ... 
- 项目实训 day15-16
			第一天我与灿哲沟通,我弄明白了真正的网络结构且如何运行的,自己记了下网络草图,开始初步用PlotNN绘制 第二天我发现pycore库表达能力不够,于是参考其他用tex写的例子,写了几个方法,最终能生成 ... 
- 中国台湾BSMI认证变动
			China Taiwan 中国台湾 2022 年 11 月 1 日,BSMI和经济部发布了针对 18 种音像产品的修订法定检验要求. 自发布之日起,CNS 15598-1:2020 Audio/vid ... 
- MLR算法双面网络时钟
			MLR算法双面网络时钟------专业LED时钟厂家![点击进入] MLR算法双面网络时钟 NTP电子时钟功能说明: 双面NTP电子时钟采用独特结构设计,可根据客户要求订制显示布局:年.月.日.时.分 ... 
- PLC入门笔记10
			梯形图电路之顺序控制 顺序控制功能图 顺序控制功能图的梯形图表达 编程原则 实例分析 SMo0.1西门子首次扫描时为ON,常用作初始化脉冲 这是台达的 这是优控的.. 
- [Leetcode 111]二叉树的最短深度 BFS/DFS
			题目 给定二叉树,求最短路径包含的节点个数 https://leetcode.com/problems/minimum-depth-of-binary-tree/ Given a binary tre ... 
