开发者学堂课程【ElasticSearch 入门精讲:wildcardQuery】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/631/detail/10009
wildcardQuery
内容介绍:
一、前言
二、演示
一、前言
* 匹配多个字符,? 匹配1个字符
注意:
避免 * 开始,会检索大量内容造成效率缓慢SearchResponsesearchResponse= client.prepareSearch("blog2").setTyp
es("article")
.setQuery(QueryBuilders.wildcardQuery("content", "elas*c?")).
get();
SearchHits hits = searchResponse.getHits();//获取命中次数,查询结果有多少对象
二、演示
在 TestES.java 中输入
/**
*wildcardQuery 演示
*需求:
使用 wildcardQuery,查询出 name 中包含有 m 的所有索引信息
*/
@Test
public void testWildcardQuery(){
//查询
SearchResponse response = client.prepareSearch(INDEX)
.setTypes(TYPE)
.setQuery(QueryBuilders.wildcardQuery(name:"name",query:"F*m?"))
.get();
//显示检索到的信息
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
}
运行结果显示
查询不到
修改 .setQuery(QueryBuilders.wildcardQuery(name:"name",query:"f*m?"))
运行结果显示
{“author”: “舍我其谁”, “last_version”: “3.0.0”, “name”: “Flume”}
因为通配符默认匹配小写字符,大写 F 匹配不到,要写为小写就能匹配到
如果想查询以 s 开头的呢?
注释掉代码//.setQuery(QueryBuilders.wildcardQuery(name:"name",query:"f*m?"))
输入
.setQuery(QueryBuilders.wildcardQuery(name:"name",query:"s*"))
运行结果显示
{“name”: “storm”, “author”: “睥睨天下”,“version”: “2.4.6”}
{“author”: “杰克逊”, “last_version”: “2.1.0”, “name”: “sqoop”}
{“name”: “Spark”, “author”: “楚留香”, “last_version”: “2.3.4”}