027 elasticsearch查询数据-Java原生客户端

文章目录

1步骤
1.创建一个client对象
2.使用client的search方法实现查询操作
3.需要SearchRequest参数
4.request对象中需要有索引的名称
5.request对象中需要包含请求体
6.请求体中包含查询条件,分页条件、过滤条件、高亮条件等
7.执行查询
8.从查询结果中取数据
2返回结果
total().value属性:命中的所有记录数
默认是有分页的,默认返回前10条数据
文档是包含在searchHits数组中
3查询条件
封装到SearchRequest对象中,其中查询条件需要封装到SearchSourceBuilder中
其中包含:
查询条件:QueryBuilders工具类创建
分页信息:from、size
过滤条件:filter实现过滤,过滤条件可以有多个

java 复制代码
package com.xd.cubemall.es;

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.util.stream.Stream;

public class IndexSearchTest {
    private RestHighLevelClient client;

    @BeforeEach
    public void init() {
        //创建一个client对象
        client = new RestHighLevelClient(RestClient.builder(
                new HttpHost("1.1.1.1",9200),
                new HttpHost("2.2.2.2",9200),
                new HttpHost("3.3.3.3",9200)
        ));
    }

    @Test
    public void searchIndex1() throws Exception {
        //http://1.1.1.1:9200/hello1/_search
        //{
        //"query":{"match_all":{}}
        //}
        SearchRequest request = new SearchRequest("hello1")
                .source(new SearchSourceBuilder()
                        .query(QueryBuilders.matchAllQuery())
                );
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //从response对象中取结果
        SearchHits hits = response.getHits();
        long total = hits.getTotalHits().value;
        System.out.println("总记录数:" + total);
        SearchHit[] searchHits = hits.getHits();
        Stream.of(searchHits).forEach(e-> System.out.println(e.getSourceAsString()));

    }
}
java 复制代码
package com.xd.cubemall.es;

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.util.stream.Stream;

public class IndexSearchTest {
    private RestHighLevelClient client;

    @BeforeEach
    public void init() {
        //创建一个client对象
        client = new RestHighLevelClient(RestClient.builder(
                new HttpHost("1.1.1.1",9200),
                new HttpHost("2.2.2.2",9200),
                new HttpHost("3.3.3.3",9200)
        ));
    }

    @Test
    public void searchIndex1() throws Exception {
        //http://1.1.1.1:9200/hello1/_search
        //{
        //"query":{"match_all":{}}
        //}
        SearchRequest request = new SearchRequest("hello1")
                .source(new SearchSourceBuilder()
                        .query(QueryBuilders.matchAllQuery())
                );
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //从response对象中取结果
        SearchHits hits = response.getHits();
        long total = hits.getTotalHits().value;
        System.out.println("总记录数:" + total);
        SearchHit[] searchHits = hits.getHits();
        Stream.of(searchHits).forEach(e-> System.out.println(e.getSourceAsString()));

    }


    @Test
    public void termQuery() throws Exception {
        SearchRequest request = new SearchRequest("hello1")
                .source(new SearchSourceBuilder()
                        .query(QueryBuilders.termQuery("title","品牌"))
                );

        printResult(request);


    }

    private void printResult(SearchRequest request) throws Exception {
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //从response对象中取结果
        //从response对象中取结果
        SearchHits hits = response.getHits();
        long total = hits.getTotalHits().value;
        System.out.println("总记录数:" + total);
        SearchHit[] searchHits = hits.getHits();
        Stream.of(searchHits).forEach(e-> {
            System.out.println(e.getSourceAsString());
            System.out.println(e.getHighlightFields());
        });
    }


    @Test
    public void searchPage() throws Exception {
        SearchRequest request = new SearchRequest("hello1")
                .source(new SearchSourceBuilder()
                        //查询条件
                        .query(QueryBuilders.matchQuery("title","明星开饭店频翻车奔跑吧"))
                        //过滤
                        .postFilter(QueryBuilders.termQuery("title","明星"))
                        .postFilter(QueryBuilders.termQuery("content","围城"))
                        //高亮显示
                        .highlighter(new HighlightBuilder()
                                .field("title")
                                .field("content")
                                .preTags("<em>")
                                .postTags("</em>")
                        )
                        //分页条件
                        .from(0)
                        .size(30)
                );
        printResult(request);
    }

}
相关推荐
Elastic 中国社区官方博客18 小时前
5 分钟内将 56 页扫描文档转化为带引用的答案:面向搜索无法读取的文档的检索增强生成流水线
大数据·运维·人工智能·elasticsearch·搜索引擎·信息可视化·全文检索
Elasticsearch2 天前
5 分钟内将 56 页扫描文档转化为带引用的答案:面向搜索无法读取的文档的检索增强生成流水线
elasticsearch
core5123 天前
Elasticsearch 车牌号片段搜索:n-gram 倒排索引实战方案
elasticsearch·n-gram·索引·倒排索引·号牌·片段
এ慕ོ冬℘゜3 天前
ES Promise.all/ Promise.race
前端·javascript·elasticsearch
Sayai3 天前
Elasticsearch 日志写入链路调优实战:ingest pipeline 补时间戳、时区偏移修复与按值类型路由(附 translog 实测)
大数据·运维·elasticsearch·搜索引擎·性能优化
总爱写点小BUG3 天前
git-tidy:一个把「提交规范治理」做成闭环的 Git 桌面客户端
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客3 天前
我们如何通过 70 多个拉取请求,将 OpenTelemetry Java agent 迁移到 invokedynamic
java·大数据·开发语言·elasticsearch·搜索引擎·全文检索·es
BreezeJiang4 天前
写了 Dockerfile 却没生效:ES + Kibana 的 compose 配置里,藏着三个反直觉的点
elasticsearch
Elasticsearch5 天前
Elastic 计划利用 NVIDIA RTX GPU 将 Jina 模型推理速度提升至 8 倍
elasticsearch
Elastic 中国社区官方博客5 天前
告别繁琐控制台:Kabanos 如何将 MongoDB Compass 的易用性带入 Elasticsearch
大数据·数据库·mongodb·elasticsearch·搜索引擎·全文检索