regexpQuery | 学习笔记

简介: 快速学习 regexpQuery

开发者学堂课程【ElasticSearch 入门精讲regexpQuery学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/631/detail/10007


regexpQuery


内容介绍:

一、前言

二、演示


一、前言

假设现在你想匹配在 W 地域 (Area) 的所有邮政编码,那我们怎样来匹配呢?

regexp 匹配

curl-XGET ‘http://localhost:9200/my_index/address/_search -d’

{

query”: {

regexp”: {

“postcode”: “W[0-9].+”

}

}

}

这个正则表达式规定了词条需要以 W 开头,紧跟着一个0到9的数字,然后是一个或者多个其它字符。

Regexp 所要匹配的字段要以正则式的形式出现,如以上代码中 “W[0-9].+”。

——————————

正则表达式查询

responsebuilder.setQuery(QueryBuilders.regexpQuery(field, regexp))

/**

*高亮显示查询

*获取数据

*查询 apache,不仅在 author 拥有,也可以在 url,在 name 中也可能拥有

*author or url  --->booleanQuery中的 should 操作

*  如果是 and 的类型--->booleanQuery 中的 must 操作

*  如果是 not 的类型--->booleanQuery 中的 mustNot 操作

*使用的 match 操作,其实就是使用要查询的 keyword 和对应

字段进行完整匹配,是否相等,相等返回

*/

@Test

public void testSearch4() {SearchResponseresponse= client.prepareSearch(indics).setSearchTyp

e(SearchType.DEFAULT)//.setQuery(QueryBuilders.multiMatchQuery("apache", "author" , "url"))

//.setQuery(QueryBuilders.regexpQuery("url", ".*apache.*"))

// .setQuery(QueryBuilders.termQuery( "author", "apache"))

.setQuery(QueryBuilders.boolQuery()

.should(QueryBuilders.regexpQuery("url",".*apache.*"))

.should(QueryBuilders.termQuery("autbor", "apache")))

//设置高亮显示--->设置相应的前置标签和后置标签

.setHighlighterPreTags("<span color= ‘blue’ size= ‘18px’>")

.setHighlighterPostTags("</span>")

//哪个字段要求高亮显示

.addHighlightedField("author")

.addHighlightedField("url")

.get();

SearchHits searchHits = response.getHits():

float maxScore = searchHits.getMaxScore();  //查询结果中的最大文档得分

System.out.println("maxScore: " + maxScore);

long totalHits = searchHits.getTotalHits();  //查询结果记录条数

System.out.println("totalHits:" + totalHits);

SearchHit[] hits = searchHits.getHits();  //查询结果

System.out.println("当前返回结果记录条数:” + hits.length);

for(SearchHit hit : hits) {System.out.println(" ========================================================");Map<String, HighlightField>  highlightFields = hit.getHighlightFields();for(Map.Entry<String , HighlightField>  me : highlightFields.entrySet()) {

System.out.println("--------------------------------------");

String key = me.getKey();

HighlightField highlightField = me.getValue();

String name = highlightField.getName();

System.out.println("key: " + key + ", name:" + name);

Text[] texts = highlightField.fragments();

String value = "";

for(Text text : texts){

//System.out.println("text: " + text.toString());

value += text.toString();

}

System.out.println("value:" + value);

}

}

}

二、演示

在 TestES.java 中输入:

/**

*regexpQuery 演示

*案例:

查询索引库之 bigdata 下的 type 之 product 下 name 字段值

中包含有 oo 的索引信息。(使用 regexpQuery 的形式实现)

*/

@Test

public void testRegexpQuery(){

//正则表达式

String regex = ".+oo.+";

//查询

SearchResponse response = client.prepareSearch(INDEX).setTypes(TYPE).setQuery(QueryBuilders.regexpQuery(name:"name",regex))

.get();

//显示检索到的信息

SearchHits hits = response.getHits();

for (SearchHit hit : hits) {

System.out.println(hit.getSourceAsString());

}

}

运行看是否能查询到带 oo 的

结果显示

{“author”: “杰克逊”, “last_version”: “2.1.0”, “name”: “sqoop”}

{“author”: “施瓦辛格”,“name”: “hadoop”, “version”: “3.1.2”}

相关文章
|
4月前
|
数据采集 数据可视化 数据挖掘
学习笔记pirate
- 使用Python的`sklearn`进行数据预处理,包括AdaBoost回归器的网格搜索调优,处理时间序列数据,并执行数据可视化。 - 应用`transformers`库对预训练的语言模型进行微调,针对RTE、MRPC和SST-2任务进行文本分类,使用PEFT(Pointer Enhanced Fine-Tuning)模型。 - 进行图像分割任务,包括图像预处理、定义数据集、训练DeepLabV3 ResNet50模型。
|
存储 消息中间件 弹性计算
尘央大佬带你学| 学习笔记
快速学习尘央大佬带你学。
尘央大佬带你学| 学习笔记
|
数据采集 SQL 消息中间件
第三阶段总结|学习笔记
快速学习第三阶段总结
131 0
第三阶段总结|学习笔记
|
开发者 Python
In 和 not in 的使用 | 学习笔记
快速学习 In 和 not in 的使用
|
存储 Java 开发者
BinaryTree|学习笔记
快速学习BinaryTree
BinaryTree|学习笔记
|
机器学习/深度学习 算法 数据挖掘
总结与回顾 | 学习笔记
快速学习总结与回顾
|
消息中间件 缓存 NoSQL
总结| 学习笔记
快速学习总结。
|
XML 设计模式 JavaScript
回顾 | 学习笔记
快速学习回顾,介绍了回顾系统机制, 以及在实际应用过程中如何使用。
|
运维 监控 JavaScript
什么是 ChatOps | 学习笔记
快速学习什么是 ChatOps
551 0
|
机器学习/深度学习 算法 数据处理
总结与练习|学习笔记
快速学习总结与练习。
下一篇
无影云桌面