• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
导航菜单
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx
您的位置:首页 > 服务器 >云计算 > elasticsearch JAVA客户端操作---搜索的过滤、分组高亮,elasticsearchjava

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

作者:网友 字体:[增加 减小] 来源:互联网

本文主要包含elasticsearch JAVA客户端操作---搜索的过滤、分组高亮,elasticsearchjava等服务器相关知识,网友希望可以进行参考

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


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);

		}
	}


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

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

相关文章

  • redshift的约束策略,redshift约束策略
  • 个性化推荐的十大挑战,个性化十大挑战
  • redis学习笔记之pipeline,redispipeline
  • 你真的了解OpenStack吗?学过的人,都知道!,了解openstack
  • Hive学习笔记(二),hive学习笔记
  • hadoop学习笔记(四)——eclipse+maven+hadoop2.5.2源码,hadoophadoop2.5.2
  • Windows上用VAGRANT创建运行管理VirtualBox虚拟机,vagrantvirtualbox
  • Linux索引节点(Inode:no space for device)用满导致的一次故障,linuxinode
  • centos7 安装配置openstack-dashboard (官网openstack-juno版),centos7openstack
  • openstack中Nova组件servers的所有python API 汇总,openstacknova

文章分类

  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx

最近更新的内容

    • XenServer网卡Bonding,xenserverbonding
    • redis主从同步,redis主从
    • Hadoop学习---第四篇Mapreducer里的Partitioner,hadooppartitioner
    • 胡振亮:原来这就是很多网站百度权重做不上去的原因,胡振亮重做
    • hadoop2企业级集群部署(DNS域名解析+NFS密钥共享+AWK批量复制),hadoop2awk
    • CDH安装官方教程,cdh官方教程
    • Install Docker on Mac OS X,installdocker
    • 观点 | 为什么说云主机比物理机故障率更低?,云主机
    • What&#39;s Wrong With Hue Oozie Editor?,hueoozie
    • hive FAILED: ParseException line 1:814 cannot recognize input near ‘;’ &lt;EOF&gt;’,hiveparseexception

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有