ElasticSearch如何使用以及java代码如何查询并排序ES中的数据(距离排序)

这篇具有很好参考价值的文章主要介绍了ElasticSearch如何使用以及java代码如何查询并排序ES中的数据(距离排序)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

import org.elasticsearch.client.RestHighLevelClient;

import org.elasticsearch.client.transport.TransportClient;

import org.elasticsearch.common.geo.GeoDistance;

import org.elasticsearch.common.settings.Settings;

import org.elasticsearch.common.transport.TransportAddress;

import org.elasticsearch.common.unit.DistanceUnit;

import org.elasticsearch.common.unit.TimeValue;

import org.elasticsearch.common.xcontent.XContentBuilder;

import org.elasticsearch.common.xcontent.XContentFactory;

import org.elasticsearch.index.query.BoolQueryBuilder;

import org.elasticsearch.index.query.GeoDistanceQueryBuilder;

import org.elasticsearch.index.query.GeoValidationMethod;

import org.elasticsearch.index.query.QueryBuilder;

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.sort.GeoDistanceSortBuilder;

import org.elasticsearch.search.sort.SortBuilders;

import org.elasticsearch.search.sort.SortOrder;

import org.elasticsearch.transport.client.PreBuiltTransportClient;

import java.io.IOException;

import java.net.InetAddress;

import java.net.UnknownHostException;

/**

  • es测试

*/

public class EsDemo

{

private static final RequestOptions COMMON_OPTIONS;

static {

RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();

// 默认缓存限制为100MB,此处修改为30MB。

builder.setHttpAsyncResponseConsumerFactory(

new HttpAsyncResponseConsumerFactory

.HeapBufferedResponseConsumerFactory(30 * 1024 * 1024));

COMMON_OPTIONS = builder.build();

}

protected RestHighLevelClient client = new RestHighLevelClient(

RestClient.builder(new HttpHost(“127.0.0.1”, 9200, “http”)));;

private String indexName = “hbp”;

private String type = “_doc”;

//从ES中查询数据

@Test

public void test1() throws IOException {

Integer pageSize = 10;

Integer PageNum = 0;

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

BoolQueryBuilder bq = QueryBuilders.boolQuery();

//按时间范围查询

QueryBuilder dateBuilder = QueryBuilders.rangeQuery(“pub_date”)

.gte(“2020-09-01 10:30:00”).lte(“2020-09-02 13:50:00”).format(“yyyy-MM-dd HH:mm:ss”);//时间范围查询

//根据id查询

List idList = new ArrayList();

idList.add(“1”);

idList.add(“2”);

idList.add(“3”);

// idList.add(“4”);

// idList.add(“5”);

QueryBuilder idBuilder = QueryBuilders.termsQuery(“_id”, idList);

// 以某点为中心,搜索指定范围

GeoDistanceQueryBuilder distanceQueryBuilder = new GeoDistanceQueryBuilder(“location”);

distanceQueryBuilder.point(39.662263, 118.197815);

//查询单位:km

distanceQueryBuilder.distance(“6”, DistanceUnit.KILOMETERS);

//构建检索

/*这里说明一下,distanceQueryBuilder就是距离查询条件,idBuilder就是id过滤条件,

dateBuilder就是时间范围查询条件,可以定义一个或多个条件(QueryBuilder),下面的

排序也是同理,可以构造多个sortBuilder*/

QueryBuilder query = bq

// .filter(distanceQueryBuilder)

// .must(idBuilder)

.filter(dateBuilder)

;

searchSourceBuilder.query(query);

//按时间排序

// searchSourceBuilder.sort(“pub_date”, SortOrder.DESC);

//按距离排序

GeoDistanceSortBuilder distanceSort = SortBuilders.geoDistanceSort(“location”, 39.662263, 118.197815);

distanceSort.order(SortOrder.ASC);

distanceSort.geoDistance(GeoDistance.ARC);

distanceSort.unit(DistanceUnit.KILOMETERS);

distanceSort.validation(GeoValidationMethod.STRICT);

searchSourceBuilder.sort(distanceSort);

//查询es数据

searchSourceBuilder.from(PageNum);

searchSourceBuilder.size(pageSize);

searchSourceBuilder.timeout(new TimeValue(100,TimeUnit.SECONDS));

SearchRequest searchRequest = new SearchRequest(“hbp”);

searchRequest.source(searchSourceBuilder);

SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);

SearchHits hits = response.getHits();

for(SearchHit hit : hits){

System.out.println(hit.getSourceAsString());

System.out.println(hit.getSortValues()[0]);//获取排序的距离,index为排序的位置

}

//get方式数据查询 ,参数为Index,type和id

// GetRequest request = new GetRequest(indexName, “7”);

// GetResponse getResponse1 = client.get(request, COMMON_OPTIONS);

// System.out.println(getResponse1.getSourceAsString());

client.close();

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。elasticsearch中根据距离聚合的java操作,程序员,elasticsearch,java,jenkins

elasticsearch中根据距离聚合的java操作,程序员,elasticsearch,java,jenkins

elasticsearch中根据距离聚合的java操作,程序员,elasticsearch,java,jenkins

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

elasticsearch中根据距离聚合的java操作,程序员,elasticsearch,java,jenkins

最后

总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习

还有更多学习笔记面试资料也分享如下:

elasticsearch中根据距离聚合的java操作,程序员,elasticsearch,java,jenkins

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
" />

最后

总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习

还有更多学习笔记面试资料也分享如下:

[外链图片转存中…(img-OzA30Mz5-1712100094721)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!文章来源地址https://www.toymoban.com/news/detail-848322.html

到了这里,关于ElasticSearch如何使用以及java代码如何查询并排序ES中的数据(距离排序)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Java操作elasticSearch复杂查询以及解析数据以及索引保存数据

    说明:基于银行测试库的操作 es的银行测试库,看一个Kibana操作 然后用java检索解析这个数据 聚合搜索 address 中包含 mill 的所有人的年龄分布以及平均薪资 以下是分解思路实现步骤: #聚合搜索 address 中包含 mill 的所有人的年龄分布以及平均年龄 GET bank/_search { “query”:{ “

    2024年02月10日
    浏览(49)
  • ElasticSearch进阶:多种查询操作,各种ES查询以及在Java中的实现

    目录 前言 1 词条查询 1.1 等值查询-term 1.2 多值查询-terms 1.3 范围查询-range 1.4 前缀查询-prefix 1.5 通配符查询-wildcard 2 复合查询 2.1 布尔查询 2.2 Filter查询 3 聚合查询 3.1 最值、平均值、求和 3.2 去重查询 3.3 分组聚合 3.3.1 单条件分组 3.3.2 多条件分组 3.4 过滤聚合 ElasticSearch 第一篇

    2024年02月02日
    浏览(38)
  • 【Java 进阶篇】使用 SQL 进行排序查询

    在数据库中,我们经常需要对查询的结果进行排序,以便更容易地理解和分析数据。SQL(Structured Query Language)提供了强大的排序功能,允许我们按照指定的列对数据进行升序或降序排序。本文将详细介绍如何使用 SQL 进行排序查询,包括基本的排序语法、多列排序、自定义排

    2024年02月07日
    浏览(38)
  • 如何使用ElasticSearch存储和查询数据

    1. 引言 在大多数的场景里,存储数据都是用MySQL这类关系型数据库,这类数据库的特点是数据存储安全性和一致性高,可以用于事务操作,但是随着数据量的增加,查询的速度也会随之降低,并且其扩展能力有限,因此在日志记录和查询等场景下,MySQL就显得力不从心,为了

    2024年02月14日
    浏览(37)
  • Elasticsearch之聚合查询介绍与使用(附RestAPI代码案例)

    前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将介绍Elasticsearch搜索引擎之聚合查询的介绍与使用,这块内容不作为面试中的重点。 如果文章有什么需要改进的地方还请大佬不吝赐教 👏👏。 小威在此先感谢各位大佬啦~~🤞🤞 🏠个人主页:小威

    2023年04月13日
    浏览(32)
  • ElasticSearch 实战:查询Sort(查询排序)

    在Elasticsearch中,查询排序(Sort)功能允许用户控制搜索结果的返回顺序。这有助于根据特定字段的值对匹配文档进行升序(asc)或降序(desc)排列。以下是如何在实战中使用Elasticsearch查询排序的示例: 一、基本排序 **1. 在URL参数中指定排序 : 此请求将按照 title 字段的值

    2024年04月16日
    浏览(22)
  • 使用Elasticsearch处理大量数据,如何翻页查询

    当使用Elasticsearch处理大量数据时,从第一页直接跳转到第100页进行查询确实是一个挑战,因为需要计算跳过的记录数并有效地获取目标页的数据。以下是一些建议来实现这种跳页查询: 使用 from 和 size 参数 : Elasticsearch提供了 from 和 size 参数来实现分页。 from 参数指定了要

    2024年04月15日
    浏览(50)
  • Elasticsearch 分组分页排序查询

    背景:elasticsearch聚合之后进行分页是非常常见的操作   实现思路:         基于es聚合函数bucket_sort、terms和指标聚合cardinality实现 实现方式:(以会员编码分组分页展示会员最近一条时间记录排序为例): 1、查询实现 2、es语句 es查询结果: 3、java获取结果 最终实现分组分页

    2024年02月13日
    浏览(29)
  • 【ElasticSearch】ElasticSearch Java API的使用——常用索引、文档、查询操作(二)

    Elaticsearch ,简称为es,es是一个开源的 高扩展 的 分布式全文检索引擎 ,它可以近乎 实时的存储 、 检索数据; 本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。es也使用java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的 目的

    2024年01月16日
    浏览(60)
  • Elasticsearch的子聚合查询和使用SpringDataElasticSearch如何实现三级的子查询

    文档中存在字段year(年),volume(卷),issue(期)三个字段,现有需求如下:需要先根据year进行聚合并且降序,然后根据volume字段在年聚合后再次聚合,issue字段则在以上两字段的聚合后再次聚合,效果图如下: 检索结果: 实现效果: https://www.elastic.co/guide/en/elasticsearch/reference/7.17/

    2024年02月16日
    浏览(27)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包