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日
    浏览(40)
  • ES搜索引擎入门+最佳实践(九):项目实战(二)--elasticsearch java api 进行数据增删改查

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

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

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

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

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

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

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

    2024年01月23日
    浏览(43)
  • 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日
    浏览(48)
  • elasticsearch查询操作(API方式)

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

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

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

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

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

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

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

    2024年02月01日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包