数据准备

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. M1 安装homebrew详解

    1.打开终端创建安装目录 sudo mkdir -p /opt/homebrew 2.修改目录权限 sudo chown -R $(whoami) /opt/homebrew 3.进入opt文件夹 c ...

  2. Java基础——(综合练习)买飞机票和找素数

    package com.zhao.test; import java.util.Scanner; public class Test14 { /* 需求:机票价格按照淡季旺季.头等舱和经济舱收费. 输 ...

  3. (jmeter笔记)添加正则提取器和JSON提取器

    添加正则提取器和JSON提取器 1.正则提取器: 返回的Token如下: 引用名称:可以理解为变量名 //调用表示${变量名} 正则表达式:"Token":"(.+?)& ...

  4. nginx的nginx.conf目录简单配置

    我的nginx.conf是在  etc/nginx/目录下 我是直接在http随便找了个地方添加如下代码的: server { listen 8066; server_name 192.168.0.2 ...

  5. Coursera Programming Languages, Part B 华盛顿大学 Week 1

    来上 programming language 的第二 part 了!这一部分介绍的语言是 Racket,之前就听说过它独特的括号语法,这次来具体了解一下 Racket definitions, fu ...

  6. memoのcmake和pkgconfig

    之前看到过pkgconfig,完全不理解什么东西,也没有去探究这到底是个啥. 然而今天想要cmake brew的库,无意中查到一种解决方案,就是利用pkg-config. 老神奇了. # includ ...

  7. 简易orm 主要是为了旧平台查询方便

    直接新建个文件即可 ExLogic.cs public class ExLogic { public static int Execute(string sqlCommand, string dbCo ...

  8. ORA-01427: 单行子查询返回多个行 出现原因及对应防止措施

    原因:没有做好子查询约束条件 解决方法:1.加 AND ROWNUM =1 条件 但筛选结果可能并非一定是你想要的 2.匹配查询唯一约束条件

  9. Delphi书籍大全【阿里云盘】

    「marco cantu的Object Pascal Handbook」等文件 https://www.aliyundrive.com/s/sJtUo8ziUpV 提取码: 5tp6点击链接保存,或者 ...

  10. ceph 集群 健康状态报 clock skew detected on mon.tg-ceph-mon-2

    1.现象: health: HEALTH_WARN no active mgr mons are allowing insecure global_id reclaim clock skew dete ...