A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我是楠楠 黑马粉丝团   /  2018-10-17 15:30  /  2312 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

【郑州校区】条件查询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号楼三层
联系电话 0371-56061160/61/62
来校路线  地铁一号线梧桐街站A口出

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马