elasticsearch JAVA客户端操作---搜索的过滤、分组高亮

elasticsearch        提供的API比较多,看名字差不多可以明白什么意思

源码地址:源码下载点击

public void search01() {
		QueryBuilder query = QueryBuilders.queryString("9");

		// 设置搜索的内容和现实的大小
		SearchResponse res = client.prepareSearch("test").setQuery(query)
				.setFrom(0).setSize(60).execute().actionGet();
		SearchHits shs = res.getHits();
		System.out.println("总共有数据:" + shs.getHits().length);
		for (SearchHit it : shs) {
			System.out.println(it.getSource());
		}
	}

	// 分组fact类似于sql的group
	public void search02() {
		// 定义一个分组并为其命名
		TermsFacetBuilder facetBuilder = FacetBuilders.termsFacet("groupBysex");
		// 按照哪个字段进行分组
		facetBuilder.field("sex").size(1);
		// 过滤器匹配所有文件
		facetBuilder.facetFilter(FilterBuilders.matchAllFilter());

		SearchResponse res = client.prepareSearch("test2").setTypes("test02")
				.addFacet(facetBuilder).execute().actionGet();

		// 获取搜索结果中的分组
		Facets facet = res.getFacets();
		// 多个分组是以map的形式存储
		TermsFacet fac = (TermsFacet) facet.getFacets().get("groupBysex");
		for (TermsFacet.Entry tf : fac.entries()) {
			System.out.println(tf.getCount() + "======" + tf.getTerm());
		}
	}

	// QUERY
	public void search03() {
		// 按照字段进行索引,只要内容含有即可不用全部符合
		QueryBuilder queryBuilder = QueryBuilders.fieldQuery("name",
				"李四1后面有内容也可以");

		//整个 数据内容中只要 有 这个字即可
		QueryBuilder qb =QueryBuilders.queryString("四");

		//组合查询 name为 张三,sex为boy的记录 must表示必须有,mustNot表示不包含,should表示可以存在
		QueryBuilder queryBuilder2 = QueryBuilders.fieldQuery("name",
				"张三");
		QueryBuilder queryBuilder3 = QueryBuilders.fieldQuery("sex",
				"boy");
		QueryBuilder qbmust = QueryBuilders.boolQuery().must(queryBuilder2).should(queryBuilder3);

		//过滤查询
		QueryBuilder qb3 = QueryBuilders.filteredQuery(
				queryBuilder2,
                FilterBuilders.prefixFilter("sex", "bo")
                );

		SearchResponse res = client.prepareSearch("test").setTypes("test01")
				.setSearchType(SearchType.DEFAULT)
				.setQuery(qb3).execute().actionGet();
		SearchHits shs = res.getHits();
		System.out.println("共查到数据:" + shs.getHits().length);
		for (SearchHit it : shs) {
			System.out.println(it.getSource());
		}
	}

	// 高亮显示
		public void search04() {
			//前缀过滤器 汉字不好用
			FilterBuilder fb =  FilterBuilders.prefixFilter("sex", "bo");
			//范围过滤
			FilterBuilder fb2 =   FilterBuilders.rangeFilter("id").from(1).to(10);
			//组合过滤
			FilterBuilder fb3 =  FilterBuilders.andFilter(
		                FilterBuilders.rangeFilter("id").from(1).to(10),
		                FilterBuilders.prefixFilter("sex", "bo")
		        ).cache(true);//默认false
			SearchResponse res = client.prepareSearch("test").setTypes("test01")
					.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
					.setFilter(fb3)
					.execute().actionGet();

			SearchHits shs = res.hits();
			System.out.println("总共有数据:" + shs.getHits().length);
			for (SearchHit it : shs) {
				System.out.println(it.getSource());

			}
		}

	// 高亮显示
	public void search05() {
		QueryBuilder qb1 = QueryBuilders.termQuery("name", "张三_4");
		// FilterBuilder filter =FilterBuilders.prefixFilter("name", "张三");
		SearchResponse res = client.prepareSearch("test4").setTypes("test04")
				.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
				.setQuery(QueryBuilders.fieldQuery("id", "1"))
				.addHighlightedField("id").setHighlighterPreTags("<spand>")
				.setHighlighterPostTags("</bod>").execute().actionGet();

		SearchHits shs = res.hits();
		System.out.println("总共有数据:" + shs.getHits().length);
		for (SearchHit it : shs) {
			System.out.println(it.getSource());
			// 获取对应的高亮域
			Map<String, HighlightField> result = it.highlightFields();
			// 从设定的高亮域中取得指定域
			HighlightField titleField = result.get("id");
			// 取得定义的高亮标签
			String[] titleTexts = titleField.fragments();
			// 为title串值增加自定义的高亮标签
			String title = "";
			for (String text : titleTexts) {
				title += text;
			}
			// 将追加了高亮标签的串值重新填充到对应的对象
			// product.setTitle(title);
			// 打印高亮标签追加完成后的实体对象
			System.out.println(title);

		}
	}
时间: 2024-10-23 09:45:35

elasticsearch JAVA客户端操作---搜索的过滤、分组高亮的相关文章

〈三〉ElasticSearch的认识:搜索、过滤、排序

目录 上节回顾 本节前言 文档的搜索 URL参数条件搜索 请求体条件搜索 语法与示例: 补充: 小节总结: 文档的过滤filter 语法与举例: filter与bool constant_score cache 小节总结: 文档的聚合分析 准备数据 语法与举例: 其他语法: 补充: 小节总结: 文档的分页.排序 分页 排序 deep paging 补充: 小节总结: 发表日期:2019年9月20日 上节回顾 1.讲了如何对索引CRUD 2.重新解释了type,只是元数据的效果 3.讲了如何对文档

HDFS的Java客户端操作代码(HDFS的查看、创建)

1.HDFS的put上传文件操作的java代码: 1 package Hdfs; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.IOException; 6 import java.net.URI; 7 8 import org.apache.hadoop.conf.Configuration; 9 import org.apache.hadoop.fs.F

Redis介绍 &amp;&amp; Java客户端操作Redis

Redis介绍 && Java客户端操作Redis 本文内容 redis介绍 redis的 shell 客户端简介 redis的 java 客户端简介 环境配置 redis 2.8.17 64bit JDK1.6 redis介绍 大多数时候,我们都将 redis 称作是内存数据库,它在运行过程中,将键值对信息存储在内存中,同时在后台以异步的形式写入本地数据库中(默认是:dump.rdb,在 redis.conf 中配置,如果需要考虑安全的持久化需求需要开启 AOF 功能,详细介绍可以查看这

elasticsearch java 客户端之action简介

上一篇介绍了elasticsearch的client结构,client只是一个门面,在每个方法后面都有一个action来承接相应的功能.但是action也并非是真正的功能实现者,它只是一个代理,它的真正实现者是transportAction.本篇就对action及transportAction的实现做一个简单的分析, elasticsearch中的绝大部分操作都是通过相应的action,这些action在action包中.它的结构如下图所示: 上图是action包的部分截图,这里面对应着各个功能

ElasticSearch java客户端更新时出现的错误:NoNodeAvailableException[None of the configured nodes are available

下午尝试 用ElasticSearch  的java客户端去做数据检索工作,测试了一下批量更新,代码如下: public static void bulkUpdateGoods(List<Goods> goods) throws IOException, InterruptedException, ExecutionException { Client client = null; try { client = TransportClient.builder().build() .addTra

elasticsearch java 索引操作

1.添加maven依赖 Xml代码   <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>0.90.0</version> </dependency> 建议使用maven管理项目,因为elasticsearch还有很多依赖包,手工维护很麻烦 2.创建连接elastic

Elasticsearch java api 基本搜索部分详解

版权声明:本文非原创文章,转载出处:http://blog.csdn.net/molong1208/article/details/50512149 一.所使用版本的介绍 使用的是elasticsearch2.1.0版本,在此只是简单介绍搜索部分的api使用 二.简单的搜索 使用api的时候,基本上可以将DSL搜索的所有情况均写出来,在此给出一个最简单搜索的全部的过程以及代码,之后将对不同的搜索只是针对函数进行介绍 (1)DSL搜索 对于最简单的DSL搜索,对一个词进行搜索使用url直接进行通信

springboot使用elasticsearch的客户端操作eslaticsearch

一  ES客户端 ES提供多种不同的客户端: 1.TransportClient ES提供的传统客户端,官方计划8.0版本删除此客户端. 2.RestClient RestClient是官方推荐使用的,它包括两种:Java Low Level REST Client和 Java High Level REST Client. ES在6.0之后提供 Java High Level REST Client, 两种客户端官方更推荐使用 Java High Level REST Client,不过当前它

ElasticSearch的客户端操作

实际开发中,主要由三种方式可以作为elasticsearch服务的客户端: 1.elasticsearch-head插件: 2.使用elasticsearch提供的Restful接口直接访问: 3.使用elasticsearch提供的API进行访问: 使用Postman工具进行Restful接口访问(下载地址:https://www.postman.com/) 1.elasticsearch的接口语法 curl ‐X<VERB> '<PROTOCOL>://<HOST>