首页 > 编程语言 >elasticsearch在Java中查询指定列的方法

elasticsearch在Java中查询指定列的方法

时间:2023-11-08 23:36:11浏览次数:41  
标签:Java String fields sourceBuilder 查询 字段 elasticsearch hit

 

背景

ES在查询时如果数量太多,而每行记录包含的字段很多,那就会导致超出ES的查询上线,默认是100MB,但是很多场景下我们只需要返回特定的字段即可,那么如何操作呢。

主要代码

@Autowired
    private RestHighLevelClient client;
public List<Map<String,Object>> search(String index) {
 List<Map<String,Object>> hitList = new ArrayList();
        try {
            //搜索请求
            SearchRequest request = new SearchRequest(index);
          
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
            BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
           //查询某字段不为空 
           boolQueryBuilder.must(QueryBuilders.boolQuery().must((QueryBuilders.existsQuery("字段"+  ".keyword"))));
            //查询指定字段
            String[] fields = {"字段1","字段2"};
            sourceBuilder.fetchSource(fields,null);
            //把查询添加放入请求中
            sourceBuilder.query(boolQueryBuilder);
            request.source(sourceBuilder);
            //查询数量
            sourceBuilder.size(10000);
            sourceBuilder.trackTotalHits(true);
            //建立SearchResponse
            SearchResponse response;
          
            response = client.search(request, RequestOptions.DEFAULT);
            //封装查询的信息
            for (SearchHit hit : response.getHits().getHits()) {
                hitList.add(hit.getSourceAsMap());
                log.debug("查询结果:{}", hit.getSourceAsString());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return hitList;
}

  

String[] fields = {“字段1”,“字段2”};
sourceBuilder.fetchSource(fields,null);

注意:字段不是实体类中的字段,而是表中的名称,不是userStatus而是user_status

 

本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。

首发链接: https://www.cnblogs.com/lingyejun/p/17818598.html

标签:Java,String,fields,sourceBuilder,查询,字段,elasticsearch,hit
From: https://www.cnblogs.com/lingyejun/p/17818598.html

相关文章

  • java.lang.NoSuchMethodError错误解决
    一、错误原因java.lang.NoSuchMethodError错误可能的原因:1、有这个类,该类没有这个方法2、类冲突、Jar包冲突、Jar包版本冲突3、有这个类(A),类中也有方法,但在B类中引用了A类,并调用A类的方法,后面修改A类,把该A类的方法返回值类型改变(如将方法返回类型由void类型改成String类型),只部署A类,......
  • java 字符串比较
    packagecom.elaina.test2;publicclassStringTest{publicstaticvoidmain(String[]args){//创建字符串Strings1=newString("abc");Strings2="abc";Strings3="Abc";//==号比......
  • 【Java基础】Java容器相关知识小结
    目录0.前言1.Collection接口1.1.List接口1.1.1.ArrayList1.1.2.LinkedList1.1.3.Vector1.1.4.Stack1.2.Set接口1.2.1.HashSet1.2.2.LinkedHashSet1.2.3.TreeSet1.3.Queue接口1.3.1.PriorityQueue1.3.2.LinkedList2.Map接口2.1.HashMap2.2.TreeMap2.3.LinkedHash......
  • Java——集合
     一、集合类概述为什么会出现集合类?面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作数组和集合类同是容器,有何不同?数组虽然可以存储对象,但长度是固定的;集合的长度是可变的。数组中可以存储基本数据类型;集合只能存储对象。......
  • java 创建字符串对象
    packagecom.elaina.test1;publicclassStringTest{publicstaticvoidmain(String[]args){//直接赋值Strings1="abc";System.out.println(s1);//使用new//空参构造,创建一个空白的字符串对象Strings2......
  • java jna 动态库从资源路径载入问题?
    在其他项目中依赖你的功能jar包时,可能出现无法找到动态库的问题。这是因为在这种情况下,动态库不再位于资源目录中,而是被打包到了依赖的项目中。为了解决这个问题,你可以尝试以下方法:修改Native.loadLibrary方法的调用方式:将动态库的绝对路径传递给Native.loadLibrary方法,而不......
  • 有趣的Java之记录用户操作日志
    Java记录操作日志java自带的日志框架是java.util.logging(JUL),从JDK1.4(2002)开始捆绑在JDK中。可以使用JUL来记录操作日志。以下是使用JUL记录事务的示例://java.util.loggingjava.util.logging.Loggerlogger=java.util.logging.Logger.getLogger(this.getClass().getName());......
  • mybatisplus实现一次多表联查+分页查询
    众所周知,mybatisplus非常好用,但是他不好用就不好用在不可以多表联查。在mybatisplusjoin中提供了联查的方法,那个参数我没看懂Orz不过,历经千辛万苦,我通过xml终于写出来了mybatisplus也可以简单实现的多表联查!我这里是以书籍整理为例,书籍是一个单独的表,书籍类别是另一个表,通过书籍......
  • Java学习—Java方法
    那么什么是方法呢?Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用方法的命名规则1.方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerso......
  • Java安全机制之一——SecurityManager和AccessController
    前言:在看socket相关代码的时候,AbstractPlainSocketImpl中的一段代码吸引了我,其实之前见过很多次类似的代码,但一直不想去看,只知道肯定和权限什么的相关,这次既然又碰到了就研究一下,毕竟也不能对java基本代码一无所知。static{java.security.AccessController.doPrivileged(......