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

相关文章
|
Kubernetes 网络协议 程序员
k8s 学习笔记 - LimitRange 限制范围
k8s 学习笔记 - LimitRange 限制范围
253 0
|
存储 SQL Java
JAP4|学习笔记
快速学习JAP4
206 0
JAP4|学习笔记
|
开发者
需要、欲望、需求 | 学习笔记
快速学习需要、欲望、需求。
228 0
需要、欲望、需求 | 学习笔记
|
机器学习/深度学习 算法 开发者
神经元模型|学习笔记
快速学习神经元模型
神经元模型|学习笔记
|
自然语言处理 开发者 索引
SimpleAnlyzer|学习笔记
快速学习 SimpleAnlyzer
SimpleAnlyzer|学习笔记
|
数据可视化 Java 开发工具
超详细的vimtutor学习笔记(中)
第一讲 编辑 1.1 移动光标 使用 h、j、k、l 键可以使光标实现左、下、上、右的移动。 也可以使用 ↑ ↓ ← → 进行上下左右的移动。
110 0
|
机器学习/深度学习 算法 开发者
神经元模型| 学习笔记
快速学习神经元模型。
神经元模型| 学习笔记
|
缓存 Dubbo 应用服务中间件
本地存根|学习笔记
快速学习本地存根
本地存根|学习笔记
|
Python
雨痕大神的《学习笔记系列》
雨痕大神的《学习笔记》可以在他的GitHub(https://github.com/qyuhen/book)下载,7000+的Star,足以证明认可度。 笔记系列陆陆续续在出版,已出版的有: 《Python 3学习笔记(上卷)》https://www.
3724 0
|
XML 设计模式 JavaScript
回顾 | 学习笔记
快速学习回顾,介绍了回顾系统机制, 以及在实际应用过程中如何使用。