[Java] ES获取数据部分字段值

在ES中如何获取部分字段值,在默认情况下,ES搜索出来是source的全部字段,但有时候我们并不想获取全部字段数据,比如在开发中,我们的index中有几十个字段,每天好几十G的数据,全部返回量太大。

要获取指定字段的数据有两种方式,

1.使用默认方式查找出source所有数据,然后根据指定field进行过滤重组数据。

2.使用addField(fields)方式请求数据,然后利用getFields方式获取结果数据。

这里列出第二种方式的获取数据方式。

//设置请求
SearchResponse sr;
if(fields != null){
  sr = client.prepareSearch(index).setTypes(type).addFields(fields).setQuery(queryBuilder).setSize(sizeLimit).setExplain(true).get();
}else{
  sr = client.prepareSearch(index).setTypes(type).setQuery(queryBuilder).setSize(sizeLimit).setExplain(true).get();
}
//获取数据方式
JSONArray array = new JSONArray();
for(SearchHit hit:sr.getHits().getHits()){
    if(fields != null){
	Set<Entry<String, SearchHitField>> fieldEntry =  hit.getFields().entrySet();
	    JSONObject json = new JSONObject();
		for(Entry<String, SearchHitField> entry:fieldEntry){
		    json.put(entry.getValue().getName(), entry.getValue().getValue());
		}
		array.add(json);
	}else{
	    array.add(hit.getSourceAsString());
	}
}

Tip:若我们设置了addFields()方法,但是并没有采用hit.getFields()方式,而直接使用hit.getSource()或hit.getSourceAsString()方法获取数据,所有的数据将会是null。

时间: 2024-10-08 20:50:34

[Java] ES获取数据部分字段值的相关文章

selenium+java:获取列表中的值

selenium+java:获取列表中的值 (2011-08-23 17:14:48) 标签: 杂谈 分类: selenium 初步研究利用java+testNg框架下写selenium测试用例,今天学会了几个API:(1)获取页面上列表中的值,并打印输出:System.out.println(selenium.getTable("xpath=/html/body/div[3]/form/table.1.1")); //输出列表中第1行第1列的值(2)判断页面上是否有某个文本:(只能判

java注解使用、java获取注解的属性、获取注解的字段值

一.前言 1.前面一直讲注解的基础知识,注解的定义,对于注解的使用几乎是一笔略过,本篇将着重讲讲注解的使用. 获取注解的属性,通过反射获取注解的属性值. 二.示例代码 1.定义一个注解,用于给 全局变量 field 字段 赋值 package com.haha.study.annotation.value;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.

java反射获取对象的属性值和对象属性中的子属性值

近段时间在做web项目,前端使用的是jQuery EasyUI. 为方便需要,准备做一个前端通用的Datagird导出Excel功能,博主也考虑过思路和最终功能,1.前端选中行导出:2.当前页导出:3.当前过滤条件导出. 想偷懒在网上找找已有的代码改改,发现大部分只能满足个别需求,使用JS导出只能满足前端,使用代码才能实现3功能. ...... 好了,说了一堆废话,回归正题,本文是在做通用自定义字段导出时所需要,根据属性名去查找对象和子对象,找到对应属性值,抓取回来放到Excel中. 直接上代码

对于url传参的心得。在java中获取数据。。

由于项目抓的紧,发现一个url传参的问题,忙里偷闲整理了一下. 首先得说明,我是要用过另一个项目的url获取json串解析出来给自己的接口使用,这是在java中完成.一般的情况是这样的: 1 public static void main(String args[]){ 2 String url="http://123.56.6.112:2080/ec_app_api/article/getfirst?params={v:1}"; //通过?在后面传参 3 StringBuilder

java中获取日期的差值

转载请注明出处,谢谢http://blog.csdn.net/harryweasley/article/details/42121485 当想到要计算差值,我们肯定想的是"2014.12.14"-"2014.12.20"=4,这种方法,但是java并没有直接给我们这样的方法,所以我想的是,将字符串转化为Date类型,继而又将 date转化为Calendar类型,通过Calendar.add()方法来解决这个方法. package lgx.java.test; imp

java 反射 - 获取成员变量的值.

通过反射,可以获取所有声明的成员变量(包括所有的),代码如下: package spt.test.src; public class Person { private String name = "pri_name"; public String id; } 运行测试: package spt.test; import java.lang.reflect.Field; import spt.test.src.Person; class ReflectionTest { @Suppres

Java反射获取Android系统属性值

目录 目录 反射定义 为何需要反射 反射方法Method getDeclaredMethod方法 getMethod方法 参数解释 invoke方法 Android 反射应用 反射定义 "反射"(Reflection)能够让运行于JVM中的程序检测和修改运行时的行为. 为何需要反射 反射带来的好处包括: 在运行时检测对象的类型. 动态构造某个类的对象. 检测类的属性和方法. 任意调用对象的方法. 修改构造函数.方法.属性的可见性. 反射方法Method getDeclaredMetho

校验获取数据或者返回值的方法,should contain的用法

如上图,验证“首页”是否添加成功,我们就通过验证页面上是否存在“首页”这个关键字,来确认数据是否添加成功 RB的写法如上图,原理是以文本输出“首页”元素内容 且定义该内容的为“${前台一级导航名称}” 然后使用“should contain”API匹配上一部定义的内容 原文地址:https://www.cnblogs.com/becks/p/12593130.html

java中使用反射获取pojo(实体)类的全部字段值

说起反射.不得不说它实在是太强大了,通过反射就能够轻轻松松拿到各种东东,假设你想在项目中解除对某个类的依赖,能够考虑用反射. 今天跟大家分享的是通过java中的反射,获取pojo类的全部字段值. 为什么要做这个操作的呢?主要是为了重写实体类的toString方法.有人会说.直接重写toString方法.返回字段.toString()的字符串不就可以了. 这么做的确能够.可是假设你的pojo类有上百个,上千个,你还要一个一个改吗?所以我们须要从新的方向去解决. 由于我们全部的pojo类.都继承一个