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”}

相关文章
|
设计模式 算法 数据库连接
后端开发中的设计模式应用与实践
在软件开发的广袤天地中,设计模式如同夜空中最亮的星辰,引领着开发者们穿越复杂系统的迷雾。本文旨在通过深入浅出的方式,不仅探讨设计模式的理论精髓,揭示它们在后端架构中的重要性,还将以生动的实践案例,展示如何在实际项目中巧妙运用这些模式。我们邀请您一同踏上这场编程之旅,探索如何借助设计模式的力量,让后端系统更加健壮、灵活且易于维护,共同揭开后端技术神秘面纱的一角。
|
索引
RestHighLevelClient查询所有的索引名称
在Elasticsearch中,使用`RestHighLevelClient`查询所有的索引名称可以通过调用`indices().getAlias(GetAliasesRequest, RequestOptions)`方法并检查返回的响应来实现。虽然这个方法通常用于获取别名,但返回的响应中也包含了索引的元数据,因此我们可以利用这个方法来获取所有的索引名称。 不过,更直接的方法是使用`indices().get(GetRequest, RequestOptions)`方法并请求`_all`索引,或者调用`cat().indices(CatIndicesRequest, RequestOptio
1024 0
|
存储 弹性计算 监控
阿里云ElasticSearch基础巡检指标
阿里云ElasticSearch基础巡检指标
|
API
ES查询优化—Scroll API 滚动查询
ES查询优化—Scroll API 滚动查询
1727 1
ES查询优化—Scroll API 滚动查询
|
数据采集 XML 前端开发
Spring MVC(spring-webmvc)之全局数据处理、拦截器、自定义类型转换器等使用指南
Spring MVC(spring-webmvc)之全局数据处理、拦截器、自定义类型转换器等使用指南
530 0
Spring MVC(spring-webmvc)之全局数据处理、拦截器、自定义类型转换器等使用指南
|
Rust 前端开发 JavaScript
|
Java
如何关闭 DEBUG org.apache.http.**日志
如何关闭 DEBUG org.apache.http.**日志
736 0
如何关闭 DEBUG org.apache.http.**日志
|
Java 关系型数据库 数据库连接
MyBatis 处理长字段(long varchar)
MyBatis 处理长字段(long varchar)
374 0
MyBatis 处理长字段(long varchar)
|
负载均衡 关系型数据库 数据库
学习云计算从入门到实践,一大波视频干货拿走不谢!(文末有彩蛋)
什么是云计算?从业者应该如何入门云计算?企业如何选择阿里云云产品来支持自己的业务形态?看行业大咖如何利用云产品来整合及优化自己的架构? 超过三十节课,数十位阿里专家倾情奉献,一一为您解答! 十节课,轻松入门云计算 课程简介:从分布式调度、存储、数据库到分布式系统架构,十节课轻松了解云计算
81862 0
学习云计算从入门到实践,一大波视频干货拿走不谢!(文末有彩蛋)