数据准备

ElasticSearch 实现分词全文检索 - 测试数据准备

ElasticSearch的各种查询

不会对查询关键字进行分词

term 查询

term的查询是代表完全匹配,搜索之前不会对你搜索的关键字进行分词,对你的关键字去文档分词库中的去匹配内容

# term 查询 -- 完整匹配
POST /sms-logs-index/_search
{
"from":0,
"size":5, //获取5条,类似分页
"query":{
"term": {
"province": {
"value": "江苏"
}
}
}
}

返回值

{
"took" : 1, //执行花了ms
"timed_out" : false, //没有超时
"_shards" : {
"total" : 1, //总共多少分片
"successful" : 1, //成功了多少分片
"skipped" : 0,
"failed" : 0
},
"hits" : { //hits 中是我们要看的数据
"total" : {
"value" : 10, //一共查了N条
"relation" : "eq"
},
"max_score" : 0.046520013, //匹配程度,匹配度越高,分数越高
"hits" : [
{
"_index" : "sms-logs-index",
"_type" : "_doc",
"_id" : "Q5XEloYBGlLaT58Lnwjj",
"_score" : 0.046520013,
"_source" : { //完成内容
"corpName" : "corpName1",
"createDate" : "2023-02-28 14:45:14",
"fee" : 47,
"ipAddr" : "172.16.0.66",
"longCode" : "张三1",
"mobile" : "13845591752",
"operatorld" : 1,
"province" : "江苏",
"sendDate" : "2023-02-28 14:43:14",
"smsContent" : "【阿里云】尊敬的vipsoft:您有2台云服务器ECS配置升级成功。如有CPU、内存变更或0Mbps带宽升级,您需要在ECS控制台手动重启云服务器后才能生效。",
"state" : 1
}
},

SpringBoot 代码term查询

@Test
void termQuery() throws Exception{
String indexName = "sms-logs-index";
RestHighLevelClient client = ESClient.getClient(); //1. 创建Request对象
SearchRequest request = new SearchRequest(indexName); //2. 指定查询条件
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.from(0);
builder.size(5);
builder.query(QueryBuilders.termQuery("province","江苏")); 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);
}
}

terms 查询

terms和term的查询机制是一样,都不会将指定的查询关键字进行分词,直接去分词库中匹配,找到相应文档内容。

terms是在针对一个字段包含多个值的时候使用。

term: where province = 江苏

terms: where province = 江苏 or province = ? or province = ?

Restful

# terms 查询
POST /sms-logs-index/_search
{
"query":{
"terms": {
"province": [
"江苏",
"上海"
]
}
}
}

Java

@Test
void termsQuery() 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.termsQuery("province","江苏","上海")); 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);
}
}

在线ik分词器:https://www.sojson.com/analyzer





ElasticSearch 实现分词全文检索 - term、terms查询的更多相关文章

  1. Elasticsearch 5.0 中term 查询和match 查询的认识

    Elasticsearch 5.0 关于term query和match query的认识 一.基本情况 前言:term query和match query牵扯的东西比较多,例如分词器.mapping ...

  2. Elasticsearch学习系列之term和match查询

    lasticsearch查询模式 一种是像传递URL参数一样去传递查询语句,被称为简单查询 GET /library/books/_search //查询index为library,type为book ...

  3. Elasticsearch学习系列之term和match查询实例

    Elasticsearch查询模式 一种是像传递URL参数一样去传递查询语句,被称为简单查询 GET /library/books/_search //查询index为library,type为boo ...

  4. 白日梦的Elasticsearch实战笔记,32个查询案例、15个聚合案例、7个查询优化技巧。

    目录 一.导读 三._search api 搜索api 3.1.什么是query string search? 3.2.什么是query dsl? 3.3.干货!32个查询案例! 四.聚合分析 4.1 ...

  5. Elasticsearch 5.x 关于term query和match query的认识

    http://blog.csdn.net/yangwenbo214/article/details/54142786 一.基本情况 前言:term query和match query牵扯的东西比较多, ...

  6. ElasticSearch 5学习(10)——结构化查询(包括新特性)

    之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...

  7. elasticsearch 分析器 分词器

    参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenizers.html 在全文搜索(Fu ...

  8. PHP+mysql数据库开发搜索功能:中英文分词+全文检索(MySQL全文检索+中文分词(SCWS))

    PHP+mysql数据库开发类似百度的搜索功能:中英文分词+全文检索 中文分词: a)   robbe PHP中文分词扩展: http://www.boyunjian.com/v/softd/robb ...

  9. Elasticsearch .Net Client NEST 多条件查询示例

    Elasticsearch .Net Client NEST 多条件查询示例 /// <summary> /// 多条件搜索例子 /// </summary> public c ...

  10. 实战ELK(8) 安装ElasticSearch中文分词器

    安装 方法1 - download pre-build package from here: https://github.com/medcl/elasticsearch-analysis-ik/re ...

随机推荐

  1. NIO 缓冲区 ByteBuffer 基本认识

    一.差别 java.nio.HeapByteBuffer 0. 获取方式:ByteBuffer.allocate(int value); 1. java堆内存,读写效率较低,但分配内存较块. 2. 受 ...

  2. 2022-04-15内部群每日三题-清辉PMP

    1.由于关键路径上一个任务估计错误,项目落后于进度,项目经理应该怎么做? A.向客户解释这个问题,并告知他们预计将延期多长时间. B.要求团队成员向客户解释为什么会错误估计该任务. C.分析快速跟进或 ...

  3. Jquery_002

    6.$.ajax方法 $.ajax([options]) options是一个json格式的对象,参数是通过键值对的形式存在的 常用的参数如下: async:(默认: true) 默认设置下,所有请求 ...

  4. Typora中的emoji表情

    People  :smile:  :laughing:  :tired_face:  :blush:  :smiley: ️ :relaxed:  :smirk:  :heart_eyes:  :ki ...

  5. Luogu P3374 【模板】树状数组 1 [单点修改-区间查询]

    P3374 [模板]树状数组 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示 ...

  6. ESXI不重启增加硬盘空间更新

    ESXI虚拟机Linux添加新磁盘后,可以通过重新扫描SCSI总线,在不重启虚拟机的情况下添加SCSI设备在线扩容磁盘(不停机)后,添加磁盘无法识别的问题,尝试了多种办法,最终通过重新扫描SCSI设备 ...

  7. 后台http请求

    HttpResponse response = HttpContext.Current.Response; response.Buffer = true; response.Clear(); resp ...

  8. Educational Codeforces Round 3 个人总结A-D

    Educational Codeforces Round 3 A. USB Flash Drives 降序排序后,贪心,甚至不会爆longlong void solve() { int n,m; ci ...

  9. javaScript事件onmouseout 、 onmouseove

    javaScript事件onmouseout . onmouseove onmouseout: 鼠标从某元素移开 onmouseover: 鼠标被移到某元素之上 这两个事件是鼠标滑过元素是的效果,可以 ...

  10. JS笔记(二):数据类型

    镇楼图 Pixiv:torino 三.数据类型 原始类型 原始类型像是string.symbol.number之类的都只能存储原子值,而不能像对象一样随意扩展.但是为了提供额外功能,采取了轻量的对象包 ...