elasticsearch查询操作(API方式)

这篇具有很好参考价值的文章主要介绍了elasticsearch查询操作(API方式)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

说明:elasticsearch查询操作除了使用DSL语句的方式(参考:elasticsearch查询操作(语句方式)),也可以使用API的方式。

准备

使用前需先导入依赖

	<!--RestHighLevelClient依赖-->
	<dependency>
	    <groupId>org.elasticsearch.client</groupId>
	    <artifactId>elasticsearch-rest-high-level-client</artifactId>
	</dependency>

创建一个测试类,查询操作代码都写在测试类里面,首先先建立RestHighLevelClient的连接

    /**
     * 定义连接
     */
    private RestHighLevelClient client;

    /**
     * 初始化客户端
     */
    @BeforeEach
    public void init(){
        client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://服务器IP地址:9200")));
    }

    /**
     * 关闭客户端
     * @throws IOException
     */
    @AfterEach
    public void close() throws IOException {
        client.close();
    }

1、模糊查询

(1)全部查询;

查询student索引库的所有文档;

    /**
     * 1.1 全部查询
     * @throws IOException
     */
    @Test
    public void queryMatchAll() throws IOException {
        // 1.创建请求
        SearchRequest request = new SearchRequest("student");

        // 2.编写DSL语句
        request.source().equals(QueryBuilders.matchAllQuery());

        // 3.发送请求
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);

        // 4.解析返回值,并打印
        SearchHits hits = response.getHits();

        // 遍历his
        for (SearchHit hit : hits) {

            // 获取字符串
            String json = hit.getSourceAsString();

            // 解析字符串成对象
            StudentDoc studentDoc = JSON.parseObject(json, StudentDoc.class);

            // 打印
            System.out.println("studentDoc = " + studentDoc);
    }

可以看到,API方式的全查默认还是值返回前10条;

elasticsearch查询操作(API方式),elasticsearch,搜索引擎,java

把解析返回值的代码抽取出来成一个方法,方便后面使用

    /**
     * 解析返回值并打印
     * @param response
     */
    private void parseJson(SearchResponse response) {
        // 获取his数据
        SearchHits hits = response.getHits();

        // 遍历his
        for (SearchHit hit : hits) {

            // 获取字符串
            String json = hit.getSourceAsString();

            // 解析字符串成对象
            StudentDoc studentDoc = JSON.parseObject(json, StudentDoc.class);

            // 打印
            System.out.println("studentDoc = " + studentDoc);
        }
    }

(2)单字段查询;

例如,查询all字段值为马尔克斯的文档;

    /**
     * 1.2 单字段查询
     * @throws IOException
     */
    @Test
    public void queryMatch() throws IOException {
        // 1.创建请求
        SearchRequest request = new SearchRequest("student");

        // 2.编写DSL语句
        request.source().query(QueryBuilders.matchQuery("all","马尔克斯"));

        // 3.发送请求
        SearchResponse search = client.search(request, RequestOptions.DEFAULT);

        // 4.解析返回值,并打印
        parseJson(search);
    }

代码执行完成,查询成功;

elasticsearch查询操作(API方式),elasticsearch,搜索引擎,java

(3)多字段查询;

例如,查询name、username和gender字段值包括“陀”的文档;

	/**
     * 1.3 多字段查询
     * @throws IOException
     */
    @Test
    public void multiMatchQuery() throws IOException {
        // 1.创建请求
        SearchRequest request = new SearchRequest("student");

        // 2.创建DSL语句
        request.source().query(QueryBuilders.multiMatchQuery("陀","name","username","gender"));

        // 3.发送请求
        SearchResponse search = client.search(request, RequestOptions.DEFAULT);

        // 4.解析返回值,并打印
        parseJson(search);
    }

代码执行完成,查询成功;

elasticsearch查询操作(API方式),elasticsearch,搜索引擎,java

2、精确查询

(1)term查询;

例如,查询name值为杜甫的文档;

	/**
     * 2.1 term查询
     * @throws IOException
     */
    @Test
    public void termQuery() throws IOException {
        // 1.创建请求
        SearchRequest request = new SearchRequest("student");

        // 2.创建DSL语句
        request.source().query(QueryBuilders.termQuery("name","杜甫"));

        // 3.发送请求
        SearchResponse search = client.search(request, RequestOptions.DEFAULT);

        // 4.解析返回值,并打印
        parseJson(search);
    }

查询完成;

elasticsearch查询操作(API方式),elasticsearch,搜索引擎,java

(2)range查询;

例如,查询job大于1,小于等于3的文档;

    /**
     *  2.2 range查询
     * @throws IOException
     */
    @Test
    public void rangeQuery() throws IOException {
        // 1.创建请求
        SearchRequest request = new SearchRequest("student");

        // 2.编写DSL语句
        request.source().query(QueryBuilders.rangeQuery("job").gt(1).lte(3));

        // 3.发送请求
        SearchResponse search = client.search(request, RequestOptions.DEFAULT);

        // 4.解析返回值,并打印
        parseJson(search);
    }

查询完成;

elasticsearch查询操作(API方式),elasticsearch,搜索引擎,java

3、复合查询

例如,查询all字段为萨特,并且job≥2,≤4的文档;

	/**
     * 3. 复合查询
     * @throws IOException
     */
    @Test
    public void booleanQuery() throws IOException {
        // 1.创建请求
        SearchRequest request = new SearchRequest("student");

        // 2.编写DSL语句
        request.source().query(QueryBuilders.boolQuery()
                .must(QueryBuilders.matchQuery("all","萨特"))
                .filter(QueryBuilders.rangeQuery("job").gte(2).lte(4)));

        // 3.发送请求
        SearchResponse search = client.search(request, RequestOptions.DEFAULT);

        // 4.解析返回值,并打印
        parseJson(search);
    }

查询完成,因为萨特的job=1,所以未查询出来;

elasticsearch查询操作(API方式),elasticsearch,搜索引擎,java

更换job条件为≥1,再查询,可以查询出来;

elasticsearch查询操作(API方式),elasticsearch,搜索引擎,java

4、分页、排序查询

例如,查询job≥1,≤4,按照job降序排序,并且从第2条文档开始,往后取8条;

/**
     * 4. 分页、排序查询
     * @throws IOException
     */
    @Test
    public void queryByPageAndSort() throws IOException {
        // 1.创建请求
        SearchRequest request = new SearchRequest("student");

        // 2.编写DSL语句
        request.source().query(QueryBuilders.rangeQuery("job").gte(1).lte(4));

        // 3.分页查询,查询从第2条开始,往后8条
        request.source().from(2).size(8);

        // 4.排序
        request.source().sort("job", SortOrder.DESC);

        // 5.发送请求
        SearchResponse search = client.search(request, RequestOptions.DEFAULT);

        // 6.解析返回值,并打印
        parseJson(search);
    }

全部符合条件的记录;

elasticsearch查询操作(API方式),elasticsearch,搜索引擎,java

分页、排序查询后,可以看到只有当前页的内容,并且job按照升序排序;

elasticsearch查询操作(API方式),elasticsearch,搜索引擎,java

从结果可以看出,from()中的索引是从0开始的,from(2)表示从第三条开始计算;

5、高亮查询

例如,把name等于关羽的文档,name字段的值设置为斜体(em);

    /**
     * 6.高亮显示
     */
    @Test
    public void heightLight() throws Exception {
        // 1.创建请求
        SearchRequest request = new SearchRequest("student");

        // 2.编写DSL语句
        request.source().query(QueryBuilders.matchQuery("name","关羽"));

        // 3.声明高亮显示
        request.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false));

        // 4.发送请求
        SearchResponse search = client.search(request, RequestOptions.DEFAULT);

        // 5.解析返回值
        SearchHits hits = search.getHits();

        // 6.遍历his
        for (SearchHit hit : hits) {

            // 7.获取字符串
            String json = hit.getSourceAsString();

            // 8.解析字符串成对象
            StudentDoc studentDoc = JSON.parseObject(json, StudentDoc.class);

            // 9.获取高亮字段
            Map<String, HighlightField> highlightFields = hit.getHighlightFields();

            // 10.判断高亮字段不能为空
            if (!CollectionUtils.isEmpty(highlightFields)) {

                // 11.获取高亮字段值
                HighlightField highlightField = highlightFields.get("name");

                // 12.判断高亮字段值不等于空
                if (highlightField != null){

                    // 13.获取高亮字段值
                    String heightFightName = highlightField.getFragments()[0].string();

                    // 14.将高亮字段值重新赋值给对象并打印
                    studentDoc.setName(heightFightName);
                    
                    System.out.println("studentDoc = " + studentDoc);
                }
            }
        }
    }

执行代码,可以看到关羽的name字段值被em标签包裹;

elasticsearch查询操作(API方式),elasticsearch,搜索引擎,java文章来源地址https://www.toymoban.com/news/detail-620501.html

到了这里,关于elasticsearch查询操作(API方式)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • elasticsearch(ES)分布式搜索引擎03——(RestClient查询文档,ES旅游案例实战)

    文档的查询同样适用昨天学习的 RestHighLevelClient对象,基本步骤包括: 1)准备Request对象 2)准备请求参数 3)发起请求 4)解析响应 我们以match_all查询为例 3.1.1.发起查询请求 代码解读: 第一步,创建 SearchRequest 对象,指定索引库名 第二步,利用 request.source() 构建DSL,DSL中可

    2024年02月07日
    浏览(53)
  • ES搜索引擎入门+最佳实践(九):项目实战(二)--elasticsearch java api 进行数据增删改查

            本篇是这个系列的最后一篇了,在这之前可以先看看前面的内容: ES搜索引擎入门+最佳实践(一)_flame.liu的博客-CSDN博客 ES搜索引擎入门+最佳实践(二)_flame.liu的博客-CSDN博客 ES搜索引擎入门+最佳实践(三)_flame.liu的博客-CSDN博客 ES搜索引擎入门+最佳实践(四)_flame.liu的博客

    2024年02月12日
    浏览(59)
  • docker安装elasticsearch与head教程完整版—.NET Core Web Api与elasticsearch打造全站全文搜索引擎

    默认已经有docker环境 下载与安装 elasticsearch ,从hub.docker里面可以看到最新版本的镜像,选择你想要的版本 本教程是以 7.17.7 为案例,为啥不适用最新的,首先个人一般需用最新的版本,如果有亢很难填,其次我自己的服务器下载的太慢(还是配置了docker加速地址的)拉取几

    2024年02月10日
    浏览(46)
  • openai自定义API操作 API (openai.custom):通过 OpenAI API 实现个性化的电商搜索引擎

    一、技术选型 在实现个性化的电商搜索引擎时,我们需要选择合适的技术框架和工具。OpenAI API为我们提供了一系列的自然语言处理和机器学习功能,可以帮助我们快速构建智能化的应用。以下是我们在实现过程中可能需要用到的技术: 自然语言处理(NLP):通过NLP技术,我

    2024年01月19日
    浏览(51)
  • 如何通过内网穿透实现Java远程连接操作本地Elasticsearch开源搜索和分析引擎

    本文主要介绍在无公网ip环境,如何使用cpolar内网穿透工具实现Java远程连接操作本地Elasticsearch开源搜索和分析引擎。 Cpolar内网穿透提供了更高的安全性和隐私保护,通过使用加密通信通道,Cpolar技术可以确保数据传输的安全性,这为用户和团队提供了更可靠的保护,使他们

    2024年01月23日
    浏览(55)
  • elasticsearch(ES)分布式搜索引擎01——(初识ES,索引库操作和文档操作,RestClient操作索引库和文档)

    1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 1.1.2.ELK技术栈 elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域: 而elasticsearc

    2024年02月07日
    浏览(62)
  • elasticsearch查询操作(API方式)

    说明:elasticsearch查询操作除了使用DSL语句的方式(参考:elasticsearch查询操作(语句方式)),也可以使用API的方式。 使用前需先导入依赖 创建一个测试类,查询操作代码都写在测试类里面,首先先建立RestHighLevelClient的连接 (1)全部查询; 查询student索引库的所有文档;

    2024年02月14日
    浏览(38)
  • API 文档搜索引擎

    在搜狗搜索的搜索结果页中, 包含了若干条结果, 每一个结果包含了图标, 标题, 描述, 展示URL等 搜索引擎的本质: 输入一个查询词, 得到若干个搜索结果, 每个搜索结果包含了标题, 描述, 展示URL和点击URL 2.1 搜索的核心思路: 当前我们有很多的网页(假设上亿个), 每个网页我们称

    2024年02月13日
    浏览(38)
  • 分布式搜索引擎ElasticSearch——搜索功能

    DSL查询分类 DSL官方文档 全文检索查询 精确查询 地理查询 复合查询 Function Score Query function score query Boolean Query 排序 分页 官方文档 高亮 快速入门 match,term,range,bool查询 排序和分页 高亮显示 就是在前面抽取的解析代码中进一步添加关于高亮的解析部分,因为highlight和so

    2024年02月01日
    浏览(54)
  • 分布式搜索引擎——elasticsearch搜索功能

    Elasticsearch提供了基于JSON的DSL (Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,一般测试用。例如:match_all 全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如: match_query multi_match_query 精确查询:根据精确词条

    2024年02月05日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包