ElasticSearch 实现分词全文检索 - term、terms查询
数据准备
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查询的更多相关文章
- Elasticsearch 5.0 中term 查询和match 查询的认识
Elasticsearch 5.0 关于term query和match query的认识 一.基本情况 前言:term query和match query牵扯的东西比较多,例如分词器.mapping ...
- Elasticsearch学习系列之term和match查询
lasticsearch查询模式 一种是像传递URL参数一样去传递查询语句,被称为简单查询 GET /library/books/_search //查询index为library,type为book ...
- Elasticsearch学习系列之term和match查询实例
Elasticsearch查询模式 一种是像传递URL参数一样去传递查询语句,被称为简单查询 GET /library/books/_search //查询index为library,type为boo ...
- 白日梦的Elasticsearch实战笔记,32个查询案例、15个聚合案例、7个查询优化技巧。
目录 一.导读 三._search api 搜索api 3.1.什么是query string search? 3.2.什么是query dsl? 3.3.干货!32个查询案例! 四.聚合分析 4.1 ...
- Elasticsearch 5.x 关于term query和match query的认识
http://blog.csdn.net/yangwenbo214/article/details/54142786 一.基本情况 前言:term query和match query牵扯的东西比较多, ...
- ElasticSearch 5学习(10)——结构化查询(包括新特性)
之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...
- elasticsearch 分析器 分词器
参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenizers.html 在全文搜索(Fu ...
- PHP+mysql数据库开发搜索功能:中英文分词+全文检索(MySQL全文检索+中文分词(SCWS))
PHP+mysql数据库开发类似百度的搜索功能:中英文分词+全文检索 中文分词: a) robbe PHP中文分词扩展: http://www.boyunjian.com/v/softd/robb ...
- Elasticsearch .Net Client NEST 多条件查询示例
Elasticsearch .Net Client NEST 多条件查询示例 /// <summary> /// 多条件搜索例子 /// </summary> public c ...
- 实战ELK(8) 安装ElasticSearch中文分词器
安装 方法1 - download pre-build package from here: https://github.com/medcl/elasticsearch-analysis-ik/re ...
随机推荐
- maven-标准目录结构,常用命令,生命周期,概念模型图
maven-标准目录结构 作为一个maven工程,它的src目录和pom.xml是必备的,进入src目录后,我们发现它里面的目录结构如下: src/main/java -- 存放项目的 . java ...
- 杭电oj 素数判定
Problem Description 对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数. I ...
- 【Numpy】安装Anaconda3和调试
1,在Anaconda官网下载一个对应操作系统的安装包:https://www.anaconda.com/distribution/ 2,然后选版本操作系统和版本号,下载完成后安装 3,windows ...
- lui - imageViewer - 图片查看器
imageViewer - 图片查看器 ImageViewer Table Attributes 参数 说明 类型 可选值 默认值 urlList 图片列表 Array - [] onChange 图 ...
- STM32F103 的 USART5使用
STM32F103zet6 的串口5是UART5 不是 USART5
- redis - 常用方法封装总结
package com.citydo.utils; import org.springframework.data.redis.connection.DataType; import org.spri ...
- pytest与allure的使用
--需要先安装pytest [1]数据驱动@pytest.mark.parametrize: @pytest.mark.parametrize只对于同一用例不同数据的传参 ①只有一个参数时 datat ...
- Typora激活时,提示【连接激活服务器失败】
购买了 Typora ,激活时提示[连接激活服务器失败] 按照步骤设置下,重新激活即可.(windows系统示例,mac 类似)
- 微信小程序:流程/步骤流/时间轴自定义组件
效果图: 1.首先在小程序components目录下新建一个名为step的文件夹,再建step组件名.结构如下. 直接上代码 step.wxml <view class="step&q ...
- git reset命令适用场景详解
☆ git reset 场景1:本地开发环境,已提交N个commit.但尚未push,希望:①丢弃本地所有的更改,代码强制回退到某个历史版本. 解决办法:git reset --hard HEAD~回 ...