首页 > 编程语言 >Java操作ElasticSearch(四、排序、高亮、分页、Filter过滤、source筛选)

Java操作ElasticSearch(四、排序、高亮、分页、Filter过滤、source筛选)

时间:2022-12-09 00:11:25浏览次数:35  
标签:Java searchSourceBuilder searchHits SearchSourceBuilder request Filter source us

排序

通过 SearchSourceBuilder 的 sort(String, SortOrder) 方法用来实现排序条件的封装

@Test
public void test18() throws IOException {
    SearchRequest request = new SearchRequest("user");
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.query(QueryBuilders.matchQuery("note", "Java"));
    // 对搜索到的结果按年龄升序排序
    searchSourceBuilder.sort(new FieldSortBuilder("age").order(SortOrder.ASC));
    request.source(searchSourceBuilder);
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    SearchHits searchHits = response.getHits();
    System.out.println("命中数:" + searchHits.getTotalHits().value);
    SearchHit[] hits = searchHits.getHits();
    for (SearchHit hit : hits) {
        String sourceAsString = hit.getSourceAsString();
        User user = JSON.parseObject(sourceAsString, User.class);
        System.out.println(user);
    }
}

 

 

 

高亮

@Test
public void test20() throws IOException {
    SearchRequest request = new SearchRequest("user");
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.query(QueryBuilders.matchQuery("note", "唱歌表演"));
    // 高亮,指定高亮字段
    searchSourceBuilder.highlighter(new HighlightBuilder().field("note"));
    request.source(searchSourceBuilder);
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    SearchHits searchHits = response.getHits();
    System.out.println("命中数:" + searchHits.getTotalHits().value);
    SearchHit[] hits = searchHits.getHits();
    for (SearchHit hit : hits) {
        String sourceAsString = hit.getSourceAsString();
        User user = JSON.parseObject(sourceAsString, User.class);
        HighlightField note = hit.getHighlightFields().get("note");
        user.setNote(note.getFragments()[0].toString());
        System.out.println(user);
    }
}

 

 

 

分页

在原来查询的基础上,给 SearchSourceBuilder 中添加 from 和 size 即可。

page = 1、size = 5,代表查询第一页,每页5条,可以计算出:from = (page - 1) * size  = 0

@Test
public void test19() throws IOException {
    SearchRequest request = new SearchRequest("user");
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.query(QueryBuilders.matchAllQuery());
    // from 开始索引
    // size 每页显示几条
    searchSourceBuilder.from(0);
    searchSourceBuilder.size(5);
    // 对搜索到的结果按年龄升序排序
    searchSourceBuilder.sort(new FieldSortBuilder("age").order(SortOrder.ASC));
    request.source(searchSourceBuilder);
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    SearchHits searchHits = response.getHits();
    System.out.println("命中数:" + searchHits.getTotalHits().value);
    SearchHit[] hits = searchHits.getHits();
    for (SearchHit hit : hits) {
        String sourceAsString = hit.getSourceAsString();
        User user = JSON.parseObject(sourceAsString, User.class);
        System.out.println(user);
    }
}

 

 

 

filter过滤

添加 filter 条件,不参与打分

 

 

source筛选

在原来搜索的基础上,通过 SearchSourceBuilder 的 fetchSource(String[] includes, String[] excludes)方法实现

  • includes 包含的字段
  • excludes 要排除的字段
@Test
public void test17() throws IOException {
    SearchRequest request = new SearchRequest("user");
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.query(QueryBuilders.matchQuery("note", "Java"));
    // 不要id、age
    searchSourceBuilder.fetchSource(new String[0], new String[]{"id", "age"});
    request.source(searchSourceBuilder);
    SearchResponse response = client.search(request, RequestOptions.DEFAULT);
    SearchHits searchHits = response.getHits();
    System.out.println("命中数:" + searchHits.getTotalHits());
    SearchHit[] hits = searchHits.getHits();
    for (SearchHit hit : hits) {
        String sourceAsString = hit.getSourceAsString();
        User user = JSON.parseObject(sourceAsString, User.class);
        System.out.println(user);
    }
}

 

标签:Java,searchSourceBuilder,searchHits,SearchSourceBuilder,request,Filter,source,us
From: https://www.cnblogs.com/xulinjun/p/16967792.html

相关文章

  • Java流程控制学习
    P33用户交互ScannerScanner对象之前我们学的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入。java.util.Scanner......
  • javascript如何将Unicode字符串拆分为JavaScript中的字符
    方案一vara='......
  • JAVA SQL注入代码审计
    前言:在之前的一篇关于​​JAVASQL注入测试​​文章中记录了一些JAVASQL注入代码审计及测试过程及注意点,近来回头看觉得那仅仅只能作为一个普通场景,漏掉了很多的特殊场景,......
  • Java操作ElasticSearch(三、查询)
    查询的步骤如下创建SearchSourceBuilder对象添加查询条件QueryBuilders添加排序、分页等其他条件创建SearchRequest对象,并指定索引库名称发起请求,得到结果获取......
  • JavaDoc
    JavaDocJavaDoc是用来生成自己的API文档的参数信息@author作者名@version版本号@since指明需要最早使用的jdk版本@param参数名@return返回值情况@throws异......
  • Java包机制
    包机制为了更好的组织类,Java提供了包机制,用于区别类名的命名空间packagepkg1[.pkg2[.pkg3...]];一般利用公司域名倒置作为包名为了能够使用某一个包的成员,我们......
  • java中的递归机制
    本文主要讲述java中的递归机制。示例1,递归代码如下:publicclassRecursion01{publicstaticvoidmain(String[]args){Tt=newT();t.test......
  • Java中的查找树和哈希表
    1、TreeSet(红黑树实现)底层使用TreeMap实现,储存结构为红黑树。构造器:publicTreeSet(){this((NavigableMap)(newTreeMap()));}add操作,把数据作为......
  • Javascript的事件
    JavaScript程序采用了异步事件驱动编程模型。在这种程序设计风格下,当文档、浏览器、元素或与之相关的对象发生某些有趣的事情时,Web浏览器就会产生事件(event)。例如,当Web......
  • Java诊断工具Arthas,Centos7下部署使用
    Arthas是Alibaba开源的Java诊断工具,深受开发者喜爱。在线排查问题,无需重启;动态跟踪Java代码;实时监控JVM状态。1.下载:wgethttps://alibaba.github.io/arthas/arthas-boot.j......