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

相关文章
|
消息中间件 存储 NoSQL
|
数据安全/隐私保护
【学习笔记之我要C】练习
【学习笔记之我要C】练习
72 0
|
算法 计算机视觉
OpenCV学习笔记--SIFT,SUFT
图像处理两大特征提取算法
139 0
|
自然语言处理 开发者 索引
SimpleAnlyzer|学习笔记
快速学习 SimpleAnlyzer
SimpleAnlyzer|学习笔记
|
分布式计算 流计算 Spark
wildcardQuery | 学习笔记
快速学习 wildcardQuery
146 0
wildcardQuery | 学习笔记
|
分布式计算 算法 Hadoop
fuzzyQuery | 学习笔记
快速学习 fuzzyQuery
151 0
fuzzyQuery | 学习笔记
|
移动开发 JavaScript HTML5
NgForm学习笔记
NgForm学习笔记
146 0
NgForm学习笔记
|
Arthas 监控 测试技术
|
机器学习/深度学习 算法 开发者
总结与回顾| 学习笔记
快速学习总结与回顾。
112 0
|
XML 数据格式
学习笔记1
学习笔记1
109 0