【郑州校区】条件查询QueryBuilder 到目前为止,我们使用了REST API和简单查询或GET请求来搜索数据。更改索引时,无论想执行的操作是更改映射还是文档索引化,都要用REST API向Elasticsearch发送JSON结构的数据。类似地,如果想发送的不是一个简单的查询,仍然把它封装为JSON结构并发送给Elasticsearch。这就是所谓的查询DSL。从更宏观的角度看,Elasticsearch支持两种类型的查询:基本查询和复合查询。 基本查询,如词条查询用于查询实际数据。 第二种查询为复合查询,如布尔查询,可以合并多个查询。 查询数据 主要依赖QueryBuilder对象 ,可以通过QueryBuilders获取各种查询 :(基于lucene) boolQuery() 布尔查询,可以用来组合多个查询条件
fuzzyQuery() 相似度查询
matchAllQuery() 查询所有数据
regexpQuery() 正则表达式查询
termQuery() 词条查询
wildcardQuery() 模糊查询 使用SearchResponse获取,支持各种查询: [AppleScript] 纯文本查看 复制代码 /**
* 搜索在elasticSearch中创建的文档对象
*/
@Test
public void testSearch() throws Exception {
// 搜索数据
// get()方法 === execute().actionGet()
// SearchResponse searchResponse = client.prepareSearch("blob1")
// .setTypes("article").setQuery(QueryBuilders.matchAllQuery()).get();
/**
* 1、ElasticSearch提供QueryBuileders.queryStringQuery(搜索内容)
* 查询方法,对所有字段进行分词查询
*/
// SearchResponse searchResponse = client.prepareSearch("blog").setTypes("article")
// .setQuery(QueryBuilders.queryStringQuery("全面"))
// .get();
/**
* 2、 只想查询content里包含全文 ,使用QueryBuilders.wildcardQuery模糊查询 *任意字符串 ?任意单个字符
*/
// SearchResponse searchResponse = client.prepareSearch("blog").setTypes("article")
// .setQuery(QueryBuilders.wildcardQuery("content", "*全文*")).get();
/** 3、 查询content词条为“搜索” 内容,使用TermQuery */
SearchResponse searchResponse = client.prepareSearch("blog")
.setTypes("article")
.setQuery(QueryBuilders.termQuery("content", "全文")).get();
SearchHits hits = searchResponse.getHits(); // 获取命中次数,查询结果有多少对象
System.out.println("查询结果有:" + hits.getTotalHits() + "条");
Iterator<SearchHit> iterator = hits.iterator();
while (iterator.hasNext()) {
SearchHit searchHit = iterator.next(); // 每个查询对象
System.out.println(searchHit.getSourceAsString()); // 获取字符串格式打印
System.out.println("id:" + searchHit.getSource().get("id"));
System.out.println("title:" + searchHit.getSource().get("title"));
System.out.println("content:" + searchHit.getSource().get("content"));
for (Iterator<SearchHitField> ite = searchHit.iterator(); ite.hasNext();) {
SearchHitField next = ite.next();
System.out.println(next.getValues());
}
}
// 关闭连接
client.close();
}
传智播客·黑马程序员郑州校区地址 河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层
|